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

算法:283. 移动零

题目

在这里插入图片描述

题目链接:leetcode 283.移动零

——————————————————————————————————————————————————-—————————

思路分析

对于小白来说,第一反应肯定是先遍历一遍数组,遇到0了,在和下一个数字交换。

试一下示例一种的数据,发现
1 0 0 3 12 之后,下一次交换就变成了 1 0 3 0 12
诶,显然不对了,要对这个方法进行改进。

很容易想到,如果只记录当前下标,无法把前面的0一起管理好,
于是我们就可以增加一个下标,也就是双指针算法

我们用两个指针,一个left,一个right,
left和right维护好的区间要求区间内的所有元素全部都是0,
这样子当我们的right == nums.size() - 1的时候,left和right区间内的所有元素就全都是0了,
而且从左向右遍历,所以非0元素的相对顺序也就不会改变了。

代码实现细节

我们首先将两个指针的初始值都初始化成1,
然后开始遍历数组,
当遇到0的时候,right++,
遇到非0的时候,首先将非0的元素与left下标元素交换位置,接着left++,这时right的位置就变成0了,所以right也++,

我们发现两种情况都有right++,就可以将right写在判断的外面,这样代码更优雅一些。

注意:当我们以right为基准去遍历数组,写成for循环的时候,如果我们在循环体里面写了right++,那么在for循环的第三个部分就不要写right++了,避免重复++

void moveZeroes(vector<int>& nums) {int left = 0,right = 0;for(right = 0;right < nums.size();){if(nums[right] != 0){swap(nums[left],nums[right]);left++;}right++;}}
http://www.dtcms.com/a/532588.html

相关文章:

  • 设计微信公众号的网站吗举例说明seo
  • 欧米伽男士手表官方网站wordpress下载类型主题
  • Chrome离线版下载版,Chrome离线版安装文件,Chrome离线包
  • 上饶网站建设多少钱分销网站有哪些
  • 阿里云 Qwen 模型的 OpenAI SDK 调用
  • 什么是提示词(Prompt),提示词类型、结构解析
  • MES系列-制造流程数字化的实现
  • 我想在网站上卖食品怎么做百度知道网址
  • 对于使用队列实现栈以及用栈实现队列的题目的解析
  • Spring Boot3零基础教程,事件驱动开发,设计登录成功后增加积分记录信息功能,笔记61
  • 网站开发进度表网络电话免费版
  • 两种Redis序列化对比
  • 精确优化长尾关键词以提升SEO效果的战略分析
  • 分析对手网站wordpress制作功能型网站
  • Spring AOP注解配置实战:从概念到代码实现的深度解析(含核心关键词)
  • 【图像算法 - 31】基于深度学习的太阳能板缺陷检测系统:YOLOv12 + UI界面 + 数据集实现
  • 火山方舟 Responses API 实战指南:从概念到「公司尽调 Dossier 生成器」
  • 【推荐系统3】向量召回:i2i召回、u2i召回
  • 网站建设及系统开发wordpress仿微信菜单栏
  • 网站死链接怎么处理网页版浏览器怎么设置
  • 【仿RabbitMQ的发布订阅式消息队列】--- 介绍
  • Frobenius范数:矩阵分析的万能度量尺
  • 做网站 php asp.net jsp学院网站建设实例
  • [论文阅读] 从 5MB 到 1.6GB 数据:Java/Scala/Python 在 Spark 中的性能表现全解析
  • 算法--滑动窗口(一)
  • 新房网站建设公司永和建设集团有限公司网站
  • 【Rust编程:从新手到大师】Rust 环境搭建(详细版)
  • SQL188 每月及截止当月的答题情况
  • 珠海网站专业制作网站开发和运维区别
  • 数据格式 、序列化和反序列化