力扣热题283 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

这道题是简单题,一开始想的是可以用双指针,维护两个指针,一个初始指向0,一个初始指向最后一位,从第一个开始遍历,如果是0的话,就交换这个值

cpp 复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int p1 = 0;
        int p2 = nums.size() - 1;
        int n = nums.size();
        while(p1<p2){
            if(nums[p1] == 0){
                swap(nums[p1],nums[p2]);
                p2--;
            }else{
                p1++;
            }
        }
    }
};

但是,忽视了题目的要求,保持非零元素的相对顺序;

重新考虑,应该是用快慢指针,slow用于保持下一个非零的位置,fast为当前的值,将交换0改为交换非零,即slow指的是元素正确位置

cpp 复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int slow = 0;
        int n = nums.size();
        for(int fast = 0;fast<n;fast++){
            if(nums[fast] != 0){
                swap(nums[fast],nums[slow++]);
            }
        }
    }
};
相关推荐
牧羊人.3338 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
小郎君6588 小时前
Vue 多标签页的加载态设计:为什么我没有用 Suspense 实现 PageLoading
vue.js·算法
JJJennie7779 小时前
MAI Gateway私有化部署全攻略:大模型网关如何接入?附架构图
算法·gateway·ai网关·魔芋ai
東隅已逝,桑榆非晚9 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
专注仿真9 小时前
卷积神经网络(CNN)算法详解
人工智能·python·算法·代码·大模型训练
FII工业富联科技服务9 小时前
多智能体如何进入制造现场?从业务协同到数字孪生验证
大数据·人工智能·算法·机器人·制造·数字孪生
≮傷£≯√9 小时前
httpserver_QNetWorkClient
算法
Evand J10 小时前
【PMSM例程11】永磁同步电机(PMSM)基于UKF的转速与转子位置估计。附下载链接
算法·matlab·卡尔曼滤波·永磁同步电机·ukf·pmsm·位置估计
货拉拉技术10 小时前
记忆即智能:重构对话式AI Agent认知基座的四层渐进式记忆与自进化系统
人工智能·算法
杜 硕10 小时前
从零开始的C++生活——第六讲——02
c++·算法·生活