当前位置: 首页 > 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.lryc.cn/news/591790.html

相关文章:

  • properties中文乱码
  • 深入解析Linux进程创建与fork机制
  • 学习日志12 python
  • 强化第三讲—一元函数微分学的概念
  • LIN协议核心详解
  • 【Dv3Admin】传递数据实现查询功能
  • Mac OS上docker desktop 替代方案
  • 【JavaEE进阶】使用云服务器搭建Linux环境
  • 数据结构排序算法总结(C语言实现)
  • Leetcode刷题营第二十九,三十题:二叉树的中序以及后序遍历
  • Docker 镜像原理
  • 在windows平台上基于OpenHarmony sdk编译三方库并暴露给ArkTS使用(详细)
  • 深入理解Java中的Map.Entry接口
  • AI问答-供应链管理:各种交通运输方式货运成本分析
  • C/C++---rdbuf()函数
  • 建筑兔零基础人工智能自学记录111|初识comfyui-20
  • 系统设计时平衡超时时间与多因素认证(MFA)带来的用户体验下降
  • VMware Workstation Pro 17下载安装
  • 安装wsl-Ubuntu到D盘
  • 微信远程控制系统2.0
  • 如何下载视频 (pc端任何视频均可下载)
  • 通义万相-文生视频实践
  • Redis主从复制数据同步实现原理详细介绍
  • 【LeetCode刷题指南】--数组串联,合并两个有序数组,删除有序数组中的重复项
  • Install Docker Engine on UbuntuMySQL
  • Docker国内镜像
  • 网络服务(第一次作业)
  • 【Servo】伺服驱动器扫频功能方案文档
  • 微信小程序地理定位功能
  • 批判式微调(CFT):原理、架构与高效推理训练新范式