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

力扣-283-移动零

1.题目描述

2.题目链接

283. 移动零 - 力扣(LeetCode) 

3.题目代码

class Solution {public void moveZeroes(int[] nums) {int dest=-1;int cur=0;while(cur<nums.length){if(nums[cur]==0){cur++;}else if(nums[cur]!=0){swap(nums,cur,dest+1);cur++;dest++;}}}public void swap(int[]nums,int i, int j){int temp=0;temp=nums[i];nums[i]=nums[j];nums [j]=temp;}
}

4.解题思路

1.定义两个指针。

2.在遍历cur的过程中,数组也就被分成了三个部分:

 

3.dest初始值为-1,cur初始值为0。

在还没有开始遍历的时候,最左边非零的区间就是0,因为还没有判断数组首元素是否非零。所以dest的初始位置就应该是在-1,这样非零元素也就是【0,-1】,也就不存在。

如果dest指针从0开始,那此时非零区间就是【0,0】,0号下标的元素也就直接被判断为非零元素。 

而cur因为是进行遍历,所以cur从0开始。这是待处理区间是【0,nums.length-1】,也就是整个数组。

4.cur遍历数组

当cur遍历完数组后,也就是cur>=nums.length时,dest指针此时还在数组上,因此待处理区间:【cur,nums.length】就是空区间。

整个数组被dest指针分成了两个部分一个是非零区间:【0,dest】,一个是零区间:【dest+1,cur-1】。这里的cur-1就是数组的最后一个元素,cur-1=numslength-1。

这时,我们就完成了这道题目的要求:所有非零元素在数组的左边,零元素在数组的右边。

5.题目思想

这道题目的思想是使用双指针,将整个数组划分为3个区间,通过对一个指针进行遍历,来完成题目的要求。

值得一提的是,这道题目的思想和快速排序有异曲同工之妙。

快速排序的思想是:通过假定一个元素temp,将所有小于temp的元素放在temp的左边,所有大于等于temp的元素放在temp的右边。

这道题目的temp也就是0,通过0作为临界值,来进行数组的划分。 

http://www.xdnf.cn/news/6869.html

相关文章:

  • 中文分词与数据可视化01
  • 板对板连接器极限测试:振动、温差与盐雾三重挑战下的生存实录
  • 我的世界模组开发——特征(2)
  • 【Linux内核】设备驱动之块设备介绍
  • 连续赋值?多变量初始化?变量初始化?赋值运算符?
  • Kotlin 作用域函数(let、run、with、apply、also)对比
  • OCC笔记:Brep格式
  • 文章记单词 | 第94篇(六级)
  • Java 面向对象进阶:抽象类与接口的舞蹈
  • 基于C语言的歌曲调性检测技术解析
  • TTS:F5-TTS 带有 ConvNeXt V2 的扩散变换器
  • bitmap/hyperloglog/GEO详解与案例实战
  • 永久免费!专为 Apache Doris 打造的可视化数据管理工具 SelectDB Studio V1.1.0 重磅发布!
  • C语言程序设计期末复习
  • 初探Reforcement Learning强化学习【QLearning/Sarsa/QCN】
  • 强化学习中,frames(帧)和 episodes(回合)
  • 【Mysql】详解InnoDB存储引擎以及binlog,redelog,undolog+MVCC
  • 多指标组合策略
  • 微信小程序开发
  • 数学复习笔记 18
  • Codex与LangChain结合的智能代理架构:重塑软件开发的未来
  • python打卡day28
  • 管理前端项目依赖版本冲突导致启动失败的问题的解决办法
  • muduo库EventLoopThread模块详解——C++
  • DeepSeek快速指南:提升效率,告别内耗
  • Windows运维工具批处理版
  • [前端高频]数组转树、数组扁平化、深拷贝、JSON.stringifyJSON.parse等手撕
  • sizeof 和strlen的对比
  • 【C++ - 仿mudou库one thread one loop式高并发服务器实现】
  • 聊一聊如何确保接口文档的完整性和准确性