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

算法讲解-移动零

一,题目描述

二,算法原理

本题中要求给所有的零移动到数组末尾。相当于给数组划分区间。一部分是非零区间;一部分是零区间。针对区间问题通用的解法--双指针法。如图:

 

首先需要两个下标:

1,第一个下标负责分组[0,d],[d+1,c-1]。前者区间是非零数据,后者零数据的区间。

2,第二个下标负责分组有没有扫描数据[0,c-1],[c,数据末尾]。前者表示扫描过的数据,后者表示没有扫描。

从第一个数据开始扫描,若是非零数据,d加加。扫描位置的数据与d的位置进行交换。若是零,则d位置不变,c继续扫描数据。知道数组结束。分组结束。

具体例子:

d最开始没有进行分组,c从第一个位置开始扫描数据,第一个为0,d不变,c加加,继续扫描。

第二个位置数据位置,d加加。之后与c的位置进行交换。如图:

第三个位置数据为0,d不变,c加加扫描数据。

第四个位置数据为3不为零,d加加,与c位置的数据交换。如图:

 

第五个位置数据为12不为零,d加加,与c位置数据交换。如图:

 

c到数组末尾,扫描结束,分组结束。

三,代码实现

void moveZeroes(vector<int>& nums) {int dest = -1;int cur = 0;for(int i = 0 ; i < nums.size(); i++){if(nums[i] != 0){dest++;swap(nums[dest],nums[i]);}}}

四,练习

通过如下链接可以进行此题的练习:

283. 移动零 - 力扣(LeetCode) 

 

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

相关文章:

  • 面试Redis篇-深入理解Redis缓存击穿
  • HTML 常用语义标签与常见搭配详解
  • 【Dv3Admin】菜单管理集成阿里巴巴自定义矢量图标库
  • uniapp云托管前端网页
  • 数据库、HTML
  • 中国各省市县坡度数据(Tif/Excel)
  • appium
  • bm-info-window百度地图去掉信息窗口影子
  • npm 和 npx 区别对比
  • 查看一个目录下的文件数量
  • 访问网页的全过程笔记
  • 移动安全工具-spd_dump
  • 聚类的可视化选择:PCA / t-SNE丨TomatoSCI分析日记
  • PyTorch边界感知上下文神经网络BA-Net在医学图像分割中的应用
  • Springboot绑定Date类型时出现日期转换异常问题
  • Springboot儿童摄影服务91f0v(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 【AI前沿】英伟达CEO黄仁勋ComputeX演讲2025|Token是AI时代的“新货币”
  • 时序数据库选型指南︰为什么IoTDB成为物联网场景首选?
  • 浅谈自动化设计最常用的三款软件catia,eplan,autocad
  • 2025前端与AI结合的最新趋势与应用场景
  • uni-app项目配置通用链接拉起ios应用android应用
  • Redis学习-03重要文件及作用、Redis 命令行客户端
  • 项目--五子棋(模块实现)
  • MATLAB电力系统暂态稳定分析
  • 掌握Git核心技巧:深入理解.gitignore文件的使用
  • 【Bluedroid】btif_a2dp_sink_init 全流程源码解析
  • 25.7.16 25.7.17 每日一题——找出有效子序列的最大长度 I/II
  • NumPy 数组存储字符串的方法
  • 「Linux命令基础」Shell常见命令
  • Qwen3-8B Dify RAG环境搭建