LeetCode283. 移动零(双指针精讲)

题目链接

283. 移动零 - 力扣(LeetCode)​​​​​​

题目理解

这道题很好理解,就是将数组中的0放到末尾,不改变非0数据的顺序即可。

解题思路

1.删除0方法(易理解,但不推荐)

先找到所有的0并删除它们,然后在数组末尾补回相同数量的0。虽然直观,但并没有完全符合题意的"移动"。

cpp 复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int zeroCount = 0;
        
        // 从后向前删除0,并计数
        for(int i = nums.size()-1; i >= 0; i--) 
        {
            if(nums[i] == 0) 
            {
                nums.erase(nums.begin() + i);
                zeroCount++;
            }
        }
        
        // 在末尾添加相同数量的0
        nums.insert(nums.end(), zeroCount, 0);
    }
};

这里需要注意的一点是:删除0的时候需要从后往前删 ,否则当我们删除 nums[i] 后,原先的 nums[i+1] 变成了 nums[i],会导致索引错位,跳过对新移动过来的元素的检查,从而可能漏删某些0。

2.双指针

这道题用双指针有一点杀鸡用牛刀的意思,不过这道题本身的目的也是为了让我们学习双指针,我下面给大家出了一个详细图解。

这里的"指针"其实并不是int*的类型。而是一个概念,用int类型的值表示数组下标。我们建立快慢指针,这里的快慢指针主要作用是将数组分块:

主播现在给大家以"5201020"这个数组举例,初始化状态下,快慢指针都指向首元素:

fast每次循环+1,如果Numsfast非0,slow自身加1:

非零,两指针都加1:

Numsfast为0时,slow不再自增,fast继续向前:

此时Numfast非0,交换二者的值,交换后slow+1:

fast继续向前:

继续向前

交换位置后,slow+1:

后面没有什么操作了,fast向后遍历,遍历完就结束了。

代码如下:

cpp 复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int slow = 0;  
        
        for (int fast = 0; fast < nums.size(); fast++) 
        {
            if (nums[fast] != 0) 
            {
                swap(nums[slow], nums[fast]);
                slow++;
            }
        }
    }
};

学会了就给主播点个赞呗?(✪ω✪)

---------(如有问题,欢迎评论区提问)---------

相关推荐
爱刷碗的苏泓舒4 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
谙弆悕博士5 小时前
系统集成项目管理工程师教程(第3版)笔记——第17章:法律法规和标准规范
笔记·职场和发展·学习方法·业界资讯·软考·法律·法规
烬羽6 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米6 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠7 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA9 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel9 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客9 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化
风栖柳白杨9 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试
imbackneverdie10 小时前
知网官宣:禁止 AI 列为论文署名作者,标注 Gemini、DeepSeek 等 AI 为作者的稿件统一下架
大数据·人工智能·ai·职场和发展·aigc·科研·高校