【力扣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++;
        }
    }
};
相关推荐
币之互联万物1 分钟前
LLM 偏好算法解析:大语言模型内容收录倾向与 NEOXGEO 技术底蕴
人工智能·算法·语言模型
菜鸟小九4 分钟前
hot100(81-90)
java·数据结构·算法
炽烈小老头8 分钟前
【每天学习一点算法 2026/03/20】单词搜索
学习·算法
旖-旎16 分钟前
二分查找(山脉数组的峰顶索引)(5)
c++·算法·leetcode·二分查找·力扣·双指针
阿贵---20 分钟前
单元测试在C++项目中的实践
开发语言·c++·算法
进击的小头20 分钟前
第14篇:MPC控制案例——无人机高度控制
python·算法·无人机
2401_8914821726 分钟前
C++中的事件驱动编程
开发语言·c++·算法
sw12138929 分钟前
C++与Rust交互编程
开发语言·c++·算法
Huyuejia30 分钟前
self-attention代码
算法
2401_8579182933 分钟前
模板编译期机器学习
开发语言·c++·算法