【力扣hot100题】(103)移动零

其实最简单的办法是遍历一遍,记录出现的非零元素个数,每个非零元素放在对应个数的位置上。

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

但还是想用推荐的双指针做:

(参考了答案)原理是一快一慢指针,保证慢指针前面全是非零元素,快指针和慢指针之前全是0元素,每次保证快指针指向非零元素,慢指针指向零元素,交换快慢指针即可。

cpp 复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int slow=0;
        int n=nums.size();
        while(slow<n&&nums[slow]!=0) slow++;
        int fast=slow;
        while(fast<n&&nums[fast]==0) fast++;
        while(fast<n){
            swap(nums[fast],nums[slow]);
            fast++;
            slow++;
            while(slow<n&&nums[slow]!=0) slow++;
            while(fast<n&&nums[fast]==0) fast++;
        }
    }
};
相关推荐
驭渊的小故事24 分钟前
LeetCode 算法题解:滑动窗口与数组合并的实战应用
算法·leetcode·职场和发展
.YM.Z28 分钟前
优选算法——【双指针算法2】C++实现
开发语言·c++·算法
逆向编程31 分钟前
MATLAB高级数据结构:cell、struct与table深度应用
开发语言·数据结构·matlab
文丑颜不良啊35 分钟前
LeetCode1501~1520题目解析
java·leetcode
zwc32104320551 小时前
第四周第五天——重构成类
c++·人工智能·opencv·算法·计算机视觉
Navigator_Z2 小时前
LeetCode //C - 1311. Get Watched Videos by Your Friends
c语言·算法·leetcode
云析赢指标公式网42 小时前
通达信ATAN均线角度公式源码笔记:四周期角度计算与DRAWBAND色带实现
笔记·算法
21岁被迫秃头2 小时前
SVT-AV1 Mini-Gop决策算法详解+源码分析.md
算法·av1·svt-av1·源码详解·mini-gop决策
Kobebryant-Manba2 小时前
IEKT向量矩阵流程&评估
人工智能·算法·矩阵
Js.Tx3 小时前
【具体数学 Concrete Mathematics】2.1.7 无限和式
算法·具体数学