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

[双指针] 1. 力扣283.移动零

题目链接:

https://leetcode.cn/problems/move-zeroes/

一. 题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序(保持相对顺序不是排序哦)。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:
输入:
nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:
输入:
nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1
     

二. 解题思路

1)这属于一个数组划分,数组分块的问题。针对这类题经典的解法就是双指针算法。这里的双指针不是真的指针,而是用下标充当“指针”。

2)指针
1. dest(destination,目的地):指向已经处理的区间内,最后一个非零元素的位置。
2. cur(current,当前的):从左向右扫描遍历数组,指向当前遍历到的位置。

3)通过两个指针将数组划分成三部分,也就是三个区间。

4)初始状态
1. dest:最开始还没有处理过的区间,自然也就没有dest,所以dest开始指向-1的位置。
2. cur:从头开始遍历数组,所以cur开始指向0的位置。

5)情况处理
cur在遍历时只可能遇到两种情况:0 或 非0
1. 遇到0:说明这个0在已处理区间的右边,符合预期不用处理,直接 cur++ 
2. 遇到非0:dest指向的是已经处理过的区间里最后一个非零元素的位置,也就意味着他的右边一个一定是0,所以我们先将 dest++ 来到0的位置,然后将cur位置的非零元素与其交换,即swap(nums[dest], nums[cur]); 然后再将 cur++ ,继续往下遍历。

6)循环结束条件
cur遍历完数组越界时,循环结束,数组内所有数字都处理过了。

 

三. 代码实现

class Solution 
{
public:void moveZeroes(vector<int>& nums) {int dest = -1, cur = 0;int n = nums.size();while(cur < n){if(nums[cur] == 0)   cur++;else {dest++;swap(nums[dest], nums[cur]);cur++;}}}
};

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

相关文章:

  • 【博客规划】关于我未来的研究方向……
  • python 列表浅拷贝 深拷贝
  • 网站如何做后台留言淘宝客网站一般用什么做的
  • 使用snmpsim与docker批量生成snmpd模拟服务
  • 燕之屋(1497.HK)燕窝肽260万单场售罄,科技重塑传统
  • 【动态规划】数位DP的原理、模板(封装类)
  • 神经网络中的批归一化(BatchNorm)
  • 最新版本组件的docker下载-nacos-Rabbitmq-redis
  • 互素最多:任意五个整数互素的巧妙构造
  • 博客网站大全上海专业网站建设价格
  • Apache换行解析 文件上传漏洞复现:原理详解+环境搭建+渗透实践(CVE-2017-15715 vulhub)
  • 自动伸缩:K8s Cluster Autoscaler,节点池配置技巧?
  • 网站制作的预算网站建设著作权
  • 性能优化之前端与服务端中的 Gzip 压缩全解析
  • 【Day 77】Linux-iptables防火墙
  • GitHub 热榜项目 - 日榜(2025-10-16)
  • 爬虫汇总与实战
  • 哪个网站做网销更好python怎么做网站
  • dede 网站地图 插件添加图标wordpress
  • 对比k8s的service和kube-proxy
  • 理想汽车Java后台开发面试题及参考答案(上)
  • Kotlin 实现社交 App 音视频模块:语音录制、播放、暂停与进度控制全流程封装
  • Lustre/Scade 形式化语义基础 —— 同步Kahn网络 (1996)
  • 内核空间与用户空间解读
  • ELK运维之路(Filebeat第一章-7.17.24)
  • 开源接口管理工具深度横评,swagger vs PostIn哪个更适合你?
  • list的使用和模拟实现
  • 群辉怎么做网站服务器专做投放广告网站
  • 【34】MFC入门到精通——MFC 控件 ComboBox 运行点击控件下拉框 “终止“、“重试“、“忽略“、“引发异常”
  • 论文见解:REACT:在语言模型中协同推理和行动