当前位置: 首页 > news >正文

【算法专题】双指针算法之 移动零

欢迎来到CILMY23的博客

🏆本篇主题为:双指针算法之移动零

🏆个人主页:CILMY23-CSDN博客

🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux

🏆感谢观看,支持的可以给个一键三连,点赞关注+收藏。


✨写在前头: 

283. 移动零 - 力扣(

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

283. 移动零 - 力扣(


一、题目解析

 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例如下:

二、代码实现

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

三、代码原理

这是一种双指针算法,实际上是利用数组下标来充当指针的,在这题中有两个指针,其中一个要遍历数组,另外一个要找到0的位置

首先我们要将数组区域划分为三个部分,如下图所示。 

 

在0---left的区间内,我们要保证非0元素是在这个区间内的,这个时候我们还要保证顺序,其实也就是保证left是一步步往下交换的。

在left----right的区间内,要保证是0元素在这个区间,

在right的右边是还没遍历过,也就是还没处理过的区间,当right不断向右走的时候,遇到0就不管他,遇到非0就得让这个位置的left和right位置的nums进行交换,这样就能让,0-left的区间就会是非0元素。

 


🛎️感谢各位同伴的支持,本期C++就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞,关注+收藏,若有不足,欢迎各位在评论区讨论。    

相关文章:

  • Qt for android 串口库使用
  • 国产32位MCU的发展与机遇
  • 【数组】Leetcode 57. 插入区间【中等】
  • 【计算机视觉(2)】
  • 【LeetCode算法】第83题:删除排序链表中的重复元素
  • 一文搞透常见的Python编码陷阱(上)(分析+案例)
  • 如何判断一个对象是否已经被回收?
  • C++ 常用UI库
  • 如何消除*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS。如何消除函数未使用的警告
  • HTTPS能否避免流量劫持?如何实现HTTPS
  • 正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-24.1,2 SPI驱动实验-SPI协议介绍
  • 【软件测试】bug篇|软件测试的生命周期|描述bug的要素|bug的级别|bug的生命周期|高频面试题:与开发产⽣争执怎么处理
  • SSL VPN
  • C++系列-定位new表达式(placement-new)
  • 一个程序员的牢狱生涯(40)好事
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 3.7、@ResponseBody 和 @RestController
  • const let
  • create-react-app项目添加less配置
  • ES6系统学习----从Apollo Client看解构赋值
  • gcc介绍及安装
  • Hexo+码云+git快速搭建免费的静态Blog
  • Laravel Mix运行时关于es2015报错解决方案
  • Python 基础起步 (十) 什么叫函数?
  • Spark RDD学习: aggregate函数
  • vue自定义指令实现v-tap插件
  • 百度小程序遇到的问题
  • 初识 beanstalkd
  • 翻译:Hystrix - How To Use
  • 关于List、List?、ListObject的区别
  • 浏览器缓存机制分析
  • 判断客户端类型,Android,iOS,PC
  • 深入 Nginx 之配置篇
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 小程序01:wepy框架整合iview webapp UI
  • 优秀架构师必须掌握的架构思维
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #07【面试问题整理】嵌入式软件工程师
  • #14vue3生成表单并跳转到外部地址的方式
  • #FPGA(基础知识)
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (3)(3.5) 遥测无线电区域条例
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (pojstep1.1.2)2654(直叙式模拟)
  • (二)springcloud实战之config配置中心
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)ssm码农论坛 毕业设计 231126
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)nsfocus-绿盟科技笔试题目
  • (转)大型网站架构演变和知识体系