283. 移动零

题解

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

思路

这是一个简单题,但是运用了一点双指针、快慢指针的小技巧。

双指针

36d1ac5d689101cbf9947465e94753c626eab7fcb736ae2175f5d87ebc85fdf0-283_2.gif

使用一个慢指针i和一个快指针j,j用来逐步+1遍历,如果遍历到的数是非0的,则把j位置的数字放到i位置,然后i向后移动一位,如果遍历到0,则i不动(意味着最后i的后方都是给0留下的空位)