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

【双指针】移动零

题目描述:

算法分析:

观察输入输出:

输出中一共分为两个区域,0区和非零区。

但是在处理未完成之前,必然存在着一个零和非零数共存的区域,所以在处理的过程当中一共有三个区域,0区,非0区和未处理区。要将整段数据划分成三个区域,那么我们需要几个标志位呢。取两个标志位就可以将代码分成三部分。

我们可以取标志位A和B,A之前的为非零区,AB之间是未处理区,B之后是零区。

设A为dest,设B为cur。进入操作之前,初始状态A左边为非零区,右边为零区,所以初始化A为-1。注意:处理过程中cur左边为未处理区右边为零区,初始时不可以是这个状态。是cur要从0开始遍历才能满足处理过程中,cur左边为未处理区右边为零区。所以我们初始化cur的为0。cur从零开始遍历,遇到非零的元素就移到dest左边(实际操作为移到dest的位置,dest再++)。操作一共要执行nums.size()次。

代码实现 :


class Solution {
public:
	void moveZeroes(vector<int>& nums) {
		int dest = -1;
		for (size_t cur = 0; cur < nums.size(); cur++)
		{
			//操作非零的数,一共三段区间,把非零的全移到dest左边去
			if (nums[cur])
			{
				swap(nums[++dest], nums[cur]);
			}

		}
	}
};

http://www.dtcms.com/a/72067.html

相关文章:

  • docker部署DVWA-暴力破解-难度从low到impossible
  • AI第一天 自我理解笔记--超参数
  • KMP算法
  • 特殊的数字排序
  • 【Agent】OpenManus-Agent-BaseAgent详细分析
  • PythonWeb开发框架—Flask-APScheduler超详细使用讲解
  • 软件架构设计习题及复习
  • HTML5 drag API实现列表拖拽排序
  • Solana
  • 新手村:混淆矩阵
  • 需求分析、定义、验证、变更、跟踪(高软47)
  • TypeScript
  • 【环境配置】windows下vscode下无法激活conda环境、创建虚拟环境报错
  • RAG的工作原理以及案例列举
  • 牛客周赛85 题解 Java ABCDEFG
  • 2025.3.10--2025.3.16学习周报
  • 大模型知识蒸馏核心技术(5)—— 多教师蒸馏
  • IT电子书的网站整理
  • esxi,vcenter6.0安装指导
  • 43运营干货:用户反馈收集及产品迭代流程
  • 在 React 中使用 Web Components 的实践操作
  • 【Django】【vue】设计一个评论模块
  • ospf单区域
  • ps5怎么设置收费系统,电玩店智能计时器使用教程,佳易王电玩计时计费定时语音提醒管理系统操作教程
  • 股票因子分析
  • AI第一天 自我理解笔记--微调大模型
  • 微服务架构下前端如何配置 OpenAPI 接口
  • 孤儿进程与僵尸进程:Linux进程管理中的“隐形杀手”与“无主孤儿”
  • 第7章 站在对象模型的尖端2: 异常处理
  • 全国医院数据可视化分析系统