Leetcode Hot 100 Problems —— 移动零

移动零

问题描述:

给一个数组,将所有0移动到数组末尾,保持其余元素位置不变。
空间复杂度只能为O(n)即不能使用辅助数组。

解法:

使用异步双指针,前指针指向前序全非零的最后一个元素的后一位,后指针指向前指针后第一个非零元。

每次将将后指针的值覆盖到前指针当前位置,前指针后移一位,后指针移动到下一个非零元。

当后指针越界后,前指针从当前位置移动到数组末尾,沿途所有位置补零。

代码描述如下:

#include <iostream>
using namespace std;

void movezero(int nums[],int numsSize){
    if(nums == NULL || numsSize == 0)
        return;
    int j=0;
    for(int i=0;i<numsSize;i++){
        if(nums[i]!=0)
            nums[j++] = nums[i];
    }
    for(int i=j;i<numsSize;i++)
        nums[i] = 0;
}

改进的解法

void movezero_1(int nums[], int numsSize){
    if(nums == NULL || numsSize == 0)
        return;
    int j=0;
    for(int i=0;i<numsSize;i++){
        if(nums[i] != 0){
            if(i != j){
                nums[j] = nums[i];
                nums[i] = 0;
            }
            j++;
        }
    }
}
posted @ 2022-03-28 13:12  ymj68520  阅读(36)  评论(0)    收藏  举报
分享到: