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

算法001:移动零

力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/move-zeroes/

使用 双指针 来解题:

此处的双指针,其实只是定义两个变量。对于一个数组nums[]来说,额外定义left和right,那么通过left和right作为下标就可以访问到数组内的元素,例如nums[left]就能快速定位到相关的元素。

具体思路:

通过两个指针把数组划分为了 [0,left],[left+1,right-1],[right,n-1]。其中n是数组的长度,n-1就是数组最后一个数字的下标。

于是两个指针把数组分成了三个部分:

[0,left]和[left+1,right-1]代表的是已经处理过的区间,前者是非0数,后者是0

[right,n-1]就代表还没有开始处理的区间

用到双指针,就需要知道两个指针分别的作用是什么:

left 的作用是:已经处理的区间内,非0元素的最后一个位置

right的作用是:遍历整个数组,right之前的数组是已经处理过的,right及之后的数组是没有处理过的

具体操作:

  1. 定义两个指针,分别为left和right,left在数组的-1元素位置,right在数组的0元素位置
  2. right遍历数组,遇到0就++,遇到非0元素则让left+1这个元素和right这个元素交换位置

代码就很好处理了:

    public void moveZeroes(int[] nums) {for(int left = -1 , right = 0 ; right < nums.length ; right++){if(nums[right] != 0){left++;int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;}}}

http://www.lryc.cn/news/350686.html

相关文章:

  • 基于springboot+vue+Mysql的网上书城管理系统
  • python实现绘制烟花代码
  • Python小白的机器学习入门指南
  • 学校上课,是耽误我学习了。。
  • OpenFeign高级用法:缓存、QueryMap、MatrixVariable、CollectionFormat优雅地远程调用
  • python基础之函数
  • 深入理解C#中的IO操作 - FileStream流详解与示例
  • 信息泄露--注意点点
  • 位运算符
  • 云上聚智——移动云云服务器进行后端的搭建及部署
  • C语言程序的编译
  • 滴滴三面 | Go后端研发
  • 深度学习之基于Yolov3的行人重识别
  • 防火墙最新技术汇总
  • PikaUnsafe upfileupload
  • git拉取项目前需要操作哪些?
  • 报名开启!2024 开源之夏丨Serverless Devs 课题已上线!
  • DataBinding viewBinding(视图绑定与数据双向绑定)简单案例 (kotlin)
  • TensorFlow基于anaconda3快速构建
  • 力扣72-编辑距离
  • K8S 删除pod的正确步骤
  • 羊大师分析,羊奶健康生活的营养源泉
  • 刷屏一天GPT-4o,发现GPT4用的都还不熟练?戳这儿
  • 力扣HOT100 - 139. 单词拆分
  • rush 功能特性梳理
  • 算法分析与设计复习__递归方程与分治
  • apk-parse包信息解析
  • AI绘画进阶工具ComfyUI 傻瓜整合包安装教程!模型共享,一键安装!
  • 无人机摄影测量数据处理、三维建模及在土方量计算
  • 大模型平台后端开发(xiaomi)