hot 100 283. 移动零

移动零


问题描述

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。


样例输入

cpp 复制代码
nums = [0,1,0,3,12]

样例输出

cpp 复制代码
[1,3,12,0,0]

评测用例规模与约定

1 <= nums.length <= 10^4

-2^31 <= nums[i] <= 2^31 - 1


解析

就是把数组的所有0移动到数组最后的位置,但不能用多余空间,原地操作。所以我们用双指针的思想来操作,左指针指向的位置左边是非0数,右指针左边直到左指针都为0

另一种思路也是i和j分别指向数组的相邻的值,然后看i位置是不是0,是的话就再看j是不是0,如果不是就交换,保证了除了0外元素相对位置不发生变化,是的话就j移动到下一个位置,如果i不是0的话就i++,j=i+1


参考程序

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

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n=nums.size();
        int i=0,j=1;
        while(j<n){
            if(nums[i]==0){
                if(nums[j]!=0)swap(nums[i],nums[j]);
                else j++;
            }else {i++;j=i+1;}
        }
    }
};

难度等级

⭐️(1~10星)

⭐️⭐️

以个人刷题整理为目的,如若侵权,请联系删除~

相关推荐
进击的荆棘19 小时前
优选算法——双指针
数据结构·算法
努力努力再努力wz19 小时前
【Linux网络系列】:JSON+HTTP,用C++手搓一个web计算器服务器!
java·linux·运维·服务器·c语言·数据结构·c++
魂梦翩跹如雨19 小时前
死磕排序算法:手撕快速排序的四种姿势(Hoare、挖坑、前后指针 + 非递归)
java·数据结构·算法
夏鹏今天学习了吗1 天前
【LeetCode热题100(87/100)】最小路径和
算法·leetcode·职场和发展
哈哈不让取名字1 天前
基于C++的爬虫框架
开发语言·c++·算法
Lips6111 天前
2026.1.20力扣刷题笔记
笔记·算法·leetcode
2501_941329721 天前
YOLOv8-LADH马匹检测识别算法详解与实现
算法·yolo·目标跟踪
洛生&1 天前
Planets Queries II(倍增,基环内向森林)
算法
小郭团队1 天前
1_6_五段式SVPWM (传统算法反正切+DPWM2)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·matlab·dsp开发
小郭团队1 天前
1_7_五段式SVPWM (传统算法反正切+DPWM3)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·算法·matlab·dsp开发