【算法系列】双指针:283.移动零

news2024/12/27 15:59:48

目录

双指针介绍

   283.移动零  

1.题目介绍

2. 解决思路:

 动图演示

 代码:


双指针介绍

常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是快慢指针。

对撞指针:一般用于顺序结构中,也称左右指针。

1、对撞指针从两端向中间移动。、

        一个指针从最左端开始,另一个从最右端开始,然后逐渐向中间逼近。

2、对撞指针的终止条件一般是两个指针相遇或者错开(也可能在循环内部找到结果跳出循环),也就是以下两种情况

       left == right  (两个指针指向同一个位置)

       left  >  right(两个指针错开)

快慢指针:又称为龟兔赛跑算法。

1、其基本意思是使用两个移动速度不同的指针在数组或者链表等序列结构上移动。

2、这种方法对于处理环形链表或者数组非常有用。

3、在⼀次循环中,每次让慢的指针向后移动⼀位,⽽快的指针往后移动两位,实现⼀快⼀慢。

   283.移动零  

1.题目介绍

283. 移动零 - 力扣(LeetCode)           

         

2. 解决思路:

使用快慢指针!!

根据题目要求,可以知道,划分数组得关键条件:0 和 非零。

因此使用指针划分[0, slow] 的元素全部都是非零元素, [slow+1, fast - 1] 的 元素全是零。

具体做法:

用⼀个 fast 指针来扫描整个数组,

另⼀个 slow 指针⽤来记录非零数序列的最后⼀个位置。

根据 cur 在扫描的过程中,遇到的不同情况,分类处理,实现数组的划分。

在 cur 遍历期间,使 [0, slow] 的元素全部都是非零元素, [slow+1, fast - 1] 的 元素全是零。

 动图演示

以下是部分流程展示

 代码:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int fast = 0,slow = -1;
        for(;fast < nums.size(); fast++)
        {
            if(nums[fast] != 0)
            {
                swap(nums[++slow],nums[fast]);
            }
        }
    }
};

💗感谢阅读!💗


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2130505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dp+观察,CF 1864 D. Matrix Cascade

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 https://codeforces.com/problemset/problem/1864/D 二、解题报告 1、思路…

在虚拟机安装mysql数据库

一、安装步骤&#xff08;下载包-传输软件包-安装包-启用仓库-使用yum安装服务器&#xff09; 1、要在mysql官网下载yum仓库包 2、下载好rpm包后&#xff0c;将其通过xftp传输到root目录下 3、使用sudo yum install yum的仓库名&#xff08;sudo yum install mysql-community-…

当人工智能聊天机器人出现问题时

在快速发展的人工智能领域&#xff0c;出现了一项新的挑战。“人工智能私语者”正在通过说服行为良好的聊天机器人打破自己制定的规则来探索人工智能伦理的界限。 这些漏洞被称为即时注入或“越狱”&#xff0c;它们暴露了人工智能系统的漏洞&#xff0c;引发了人们对其安全性…

如何使用python中的math

首先&#xff0c;导入math函数库。 一、计算平方根 输入一个数值&#xff0c;保存在变量n中。 用函数sqrt&#xff0c;计算变量平方根的值。 二、计算幂 可以用函数exp&#xff0c;计算e的x次幂。 三、计算对数 设置两个数&#xff0c;保存在变量n和a中。 接着&#xff0c;用…

Xcode报错:No exact matches in reference to static method ‘buildExpression‘

Xcode报错1&#xff1a;No exact matches in reference to static method buildExpression Xcode报错2&#xff1a;Type () cannot conform to View 这两个报错都是因为在SwiftUI的View的Body里面使用了ForEach循环,却没有在ForEach循环闭包的内部返回视图&#xff0c;而是做了…

云服务器Jenkins部署Springboot项目以及Vue项目

一、创建Springboot项目并且上传git 在gitee上创建一个仓库 点击初始化仓库 在idea克隆gitee仓库 创建一个普通的Springboot项目只需要勾选springweb 上传创建的新模块到gitee仓库 二、安装Maven maven的官网地址&#xff1a;https://maven.apache.org/download.cgi 点击下载…

OJ 括号生成

题目&#xff1a; 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例&#xff1a; 代码分析&#xff1a; class Solution { public://进行回溯调用vector<string> generateParenthesis(int n) {if(…

形式向好、成本较低、可拓展性较高的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…

你的 Java 对象占用了多少内存

在本文中&#xff0c;我们将讨论 JVM 如何在内存中存储对象&#xff1a;它们的对齐方式。 对象表示是理解 JVM 底层机制的重要主题&#xff0c;它提供了有助于应用程序调优的见解。 这里&#xff0c;我们主要关注填充和对齐&#xff0c;而不是 JVM 如何在内存中表示对象。要获…

CSS 图片廊:打造精美视觉体验

CSS 图片廊:打造精美视觉体验 随着互联网技术的发展,网页设计越来越注重用户体验和视觉效果的呈现。CSS(层叠样式表)作为网页设计的重要工具,能够帮助开发者创建出既美观又实用的图片展示效果。本文将详细介绍如何使用CSS来打造一个精美的图片廊,以提升网页的视觉效果和…

【C++二分查找】2517. 礼盒的最大甜蜜度

本文涉及的基础知识点 C二分查找 贪心&#xff08;决策包容性) LeetCode 2517. 礼盒的最大甜蜜度 给你一个正整数数组 price &#xff0c;其中 price[i] 表示第 i 类糖果的价格&#xff0c;另给你一个正整数 k 。 商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼…

RabbitMQ高级篇,进阶内容

强烈建议在看本篇博客之前快速浏览文章&#xff1a;RabbitMQ基础有这一篇就够了 RabbitMQ高级篇 0. 前言1. 发送者的可靠性1.1 生产者重试机制1.2 生产者确认机制1.3 实现生产者确认 2. MQ的可靠性2.1 MQ持久化2.2 LazyQueue 3. 消费者的可靠性3.1 消费者确认机制3.2 失败重试策…

25、Wpf之App资源应用

开发平台&#xff1a;Win10 64位 开发环境&#xff1a;VS2022(64位) Preview .NET Framework&#xff1a;.NET 6 文章目录 一 Resources1.1 Application中定义资源1.2 样式&#xff08;Styles&#xff09;1.3 模板&#xff08;Templates&#xff09;1.4 数据转换器&#xff08;…

微信自动通过好友和自动拉人进群,微加机器人这个功能太好用了

又发现一个好用的功能&#xff0c;之前就想找一个这种工具&#xff0c;现在发现可以利用微加机器人的两个功能来实现&#xff0c;分别是加好友和关键词拉群 首先 微加机器人的专业版 > 功能 > 加好友设置 可以设置一个关键词通过,这样别人加好友的时候只需要输入制定内…

无人机遂行编队飞行中的纯方位无源定位(2022数模国赛B题)

文章目录 论文项目地址 数模国赛前的练手题&#xff0c;实力不够&#xff0c;参考了好多论文才写出来&#xff0c;个人感觉思路应该没什么大问题&#xff0c;供大家参考 论文 项目地址 github&#xff1a;UAVFormationFlight gitee&#xff1a;UAVFormationFlight 项目包含 完…

数据处理脚手架PyODPS入门体验

本文分享了初次使用PyODPS&#xff08;Python版的Open Data Processing Service&#xff09;的心路历程。作者通过实际案例&#xff0c;深入浅出地探讨了PyODPS相较于传统ODPS SQL在数据处理上的灵活性与便捷性&#xff0c;特别是在处理复杂JSON字段统计与多条件筛选方面展现出…

基于verilog的流水线CPU(无中断异常)

突然发现这个还没传&#xff0c;懒得写了&#xff0c;直接把实验报告传上来吧。 流水线CPU实验报告 ​ 本实验最终实现了11条指令&#xff0c;完成了2位控制的分支预测&#xff0c;以及load-use的阻塞&#xff0c;jump的阻塞&#xff0c;beq预测失败的阻塞&#xff0c;还有RA…

《2024中国数据要素产业图谱2.0版》重磅发布

数据猿出品 本次“数据猿2024年度三大媒体策划活动——《2024中国数据要素产业图谱2.0版》”的发布&#xff0c;下一次版本迭代将于2024年12月底发布2024年3.0版&#xff0c;敬请期待&#xff0c;欢迎报名。 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着技术不断革新&a…

C++函数在库中的地址

本文讲述C如何直接调用动态库dll或者so中的函数。 首先我们准备一个被调用库&#xff0c;这个库里面有两个函数&#xff0c;分别是C98 与 C11 下的&#xff0c;名称是run2和run1。 被调用库 相关介绍请看之前的文章《函数指针与库之间的通信讲解》。 //dll_ex_im.h #ifndef…

【通俗理解】二项分布的均值与方差——从成功与失败的概率看分布

【通俗理解】二项分布的均值与方差——从成功与失败的概率看分布 关键词提炼 #二项分布#均值#方差#成功概率#失败概率#伯努利试验 公式解释与案例 二项分布的基本公式 二项分布描述的是在n次独立重复的伯努利试验中&#xff0c;成功次数的概率分布。每次试验的成功概率为p&…