283.移动零

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

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

思路:移动0,但我们不知道哪个是0,那么我们就假设nums[0]为0,如果不为0,就把0后移一位,最后在当前为0且后续全是0时补全。

代码实现:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int i0 = 0;
        for(int i=0;i<nums.size();i++){
            if(nums[i]!=0){
                nums[i0++] = nums[i];
            }
        }
        for(int i=i0;i<nums.size();i++){
            nums[i] = 0;
        }
    }
};

时间复杂度:O(n)
空间复杂度:O(1)

posted @ 2026-03-06 21:24  Cloud00  阅读(5)  评论(0)    收藏  举报