4.移动零

1.题目描述

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

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

示例 1:

复制代码
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

2.解题思路

思路1:暴力解,循环过程中记录0的个数,遇到非0就往前移动0个数个位置(新手友好型),最后再填补0到末尾

思路2:双指针遍历+交换

3.代码

1)暴力法

cpp 复制代码
void moveZeroes(int* nums, int numsSize) {

    int cnt = 0;//记录0的个数
    for(int i = 0; i < numsSize; i++){
        if(nums[i]==0){
            cnt++;//碰到0就+1
        }else{//否则就移动非零元素
             nums[i-cnt] = nums[i];
        }
    }
    for(int j = 0; j< cnt;j++){
        nums[numsSize -1- j] = 0;//填补0
    }
}

2)双指针法

cpp 复制代码
void swap(int *a, int *b) {
    int t = *a;
    *a = *b, *b = t;
}

void moveZeroes(int *nums, int numsSize) {
    int left = 0, right = 0;
    while (right < numsSize) {
        if (nums[right]) {
            swap(nums + left, nums + right);
            left++;
        }
        right++;
    }
}
相关推荐
郝学胜-神的一滴14 小时前
罗德里格斯旋转公式(Rodrigues‘ Rotation Formula)完整推导
c++·unity·godot·图形渲染·three.js·unreal
lzh2004091914 小时前
深入理解进程:从PCB内核结构到写时拷贝的底层实战
linux·c++
aseity15 小时前
跨平台项目中QString 与 非Qt 跨平台动态库在字符集上的一个实用的互操作约定.
c++·经验分享
CN-Dust15 小时前
【C++】while语句例题专题
数据结构·c++·算法
用户8055336980315 小时前
现代Qt开发教程(新手篇)1.11——定时器
c++·qt
澈20715 小时前
STL迭代器:容器遍历的万能钥匙
开发语言·c++
灵智实验室15 小时前
PX4位置速度估计技术详解(四):LPE 激光雷达高度融合的实现错误
算法·无人机·px 4
azoo15 小时前
emplace_back和push_back() 函数添加 cv::Point 类型数据
c++·opencv
CQU_JIAKE15 小时前
【A】3742,3387,并查集
算法
gihigo199815 小时前
CHAN时延估计算法(二维/三维定位实现)
算法