【力扣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++;
        }
    }
};
相关推荐
那个村的李富贵6 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
power 雀儿6 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
Yvonne爱编码6 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
熬夜有啥好6 小时前
数据结构——哈希表
数据结构·散列表
琹箐6 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
renhongxia17 小时前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了7 小时前
数据结构之树(Java实现)
java·算法
算法备案代理7 小时前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.7 小时前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
我能坚持多久8 小时前
【初阶数据结构01】——顺序表专题
数据结构