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

leetcode_283.移动零

题目如下

在这里插入图片描述
本道题采用双指针的思想完成,可以使用快慢指针的思想,通过快指针遍历数组找出数组中的非零元素,用慢指针来维护有效值
可以先根据题目的条件手搓出来一个测试,方便理解

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
void moveZeroes(vector<int>& nums) {//方法一:快慢指针int fast=0,slow=0;for(fast=0;fast<nums.size();fast++){if(nums[fast]!=0){nums[slow++]=nums[fast];}}cout<<"fast "<<fast<<'\n';cout<<"slow "<<slow<<'\n';}
int main()
{vector<int>v(5);for(int i=0;i<5;i++){int x;cin>>x;v[i]=x;}moveZeroes(v);for(int i=0;i<5;i++){cout<<v[i]<<" ";}return 0;
}

例如题目的案例一:0 1 0 3 12
先自己模拟一遍,刚开始 fastslow指针都指向 0 号索引,开始向后找,一旦发现不为 0的元素,就将其填在slow索引处,第一次发生在索引为1的时候,经过操作,得到了1 1 0 3 12此时slow进行自增指向索引1,第二次发生在索引为3的时候,经过操作得到了1 3 0 3 12,第三次发生在索引为4的时候,经过操作得到了1 3 12 3 12,最终遍历完毕,fast最后指向了索引5,slow最后指向了索引3
验证一下:
在这里插入图片描述
没错是这样的,这样就找到了数组中所有不为0的数字,且由slow来维护。最后我们只需要将slow-fast之间的数字全部变为0就可以了

		//就相当于slow到数组的最后for(int i=slow;i<nums.size();i++){nums[i]=0;}//两种都可以for(int i=slow;i<fast;i++){nums[i]=0;}

AC代码:

class Solution {
public:void moveZeroes(vector<int>& nums) {//方法一:快慢指针int fast=0,slow=0;for(fast=0;fast<nums.size();fast++){if(nums[fast]!=0){nums[slow++]=nums[fast];}}for(int i=slow;i<fast;i++){nums[i]=0;}}
};

还有另外一种方法:
定义 l 和 r 指针,通过 r 指针遍历数组,找到不为 0 的元素,依次交换 还是以0 1 0 3 12为例子:
刚开始 l 和 r都指向0号索引,r向前遍历,当找到不为0的数字时和索引为 l 的数字进行交换,第一次找到了1l(0)交换得到了1 0 0 3 12此时l 自增->(1),第二次找到了3进行交换,得到了1 3 0 0 12,l自增->(2),第三次找到了12,进行交换得到了1 3 12 0 0即是最终答案,此时l = 3 r= 5
在这里插入图片描述
最终也可以得到正确答案:

AC代码:

class Solution {
public:void moveZeroes(vector<int>& nums) {int l=0,r=0;while(r<nums.size()){if(nums[r]!=0){swap(nums[l],nums[r]);l++;}r++;}}
};
http://www.xdnf.cn/news/13541.html

相关文章:

  • 品牌控价需要精准SKU 数据监测
  • 【 WWDC25:新系统,新命名】
  • 五款MySQL 可视化客户端软件
  • 相机--单目相机
  • 《tqdm:让你的代码会“喘气”的神奇进度条!》
  • 性能测试Locust的使用
  • Docker pull时报错:https://registry-1.docker.io/v2/
  • FastAPI基础入门(三)
  • 创客匠人赋能家庭教育行业:从知识分享到IP变现的转型之路
  • 数值偏微分方程的代数骨架:线性代数及其挑战-AI云计算
  • 公司网络变差的解决方法(固定IP地址冲突)
  • Python实现自动化识别蛋白-配体氢键
  • 第二部分-静态路由实验
  • PHP框架在内容管理系统开发中的优势:效率、安全与扩展性!
  • 通过Heron Handoff 插件我们在figma设计中可以像sketch导出离线标注
  • 5G视频通话可以做营销吗
  • AWS NLB使用分批滚动部署的500问题
  • NLP学习路线图(三十九):对话系统
  • 串扰的烦恼(Xtalk)
  • Spring Boot 集成 Redis 实战教程
  • 中小企业无线局域网络搭建与优化指南
  • 带IIC接口同步降压、快速充电、升压放电双向芯片SC8813使用介绍
  • [Git] 配置 Git
  • Vue ⑧-Vue3 | 组合式API
  • 智能合约中人工智能驱动的漏洞分析:趋势、挑战与未来方向
  • 去中心化交易所(DEX)架构:智能合约驱动与AMM算法创新
  • 基于YOLOv12的电力高空作业安全检测:为电力作业“保驾护航”,告别安全隐患!
  • 提升电子商务平台安全的有效策略
  • 台湾住宅IP哪家好,怎么找到靠谱的海外住宅IP代理商
  • window批处理文件(.bat),用来清理git的master分支