LeetCode 283

https://leetcode.cn/problems/move-zeroes/description/

难度:简单

高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/

题目要求在不复制数组的情况下原地对数组进行操作。

直接把 nums 当作栈,用一个变量 stackSize 表示栈的大小,初始值为 0。

入栈就是把 nums[stackSize] 置为 nums[i],同时把 stackSize 加一。

最后把 nums 中的下标从 stackSize 到 n−1 的数都置为 0。

时间复杂度:O(n),其中 n 是 nums 的长度。

空间复杂度:O(1)。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int stack_size = 0;
        for (int x : nums) {
            if (x) {
                nums[stack_size++] = x; // 把 x 入栈
            }
        }
        for (int i = stack_size; i < nums.size(); i++) {
            nums[i] = 0;
        }
    }
};