leetcode 283. 移动零

leetcode 283. 移动零_第1张图片

方法一. 两次遍历

先将所有非零元素移至左边,后进行补零。

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

        for (int i = slow; i < nums.size(); i++)
            nums[i] = 0;
    }
};

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

方法二. 一次遍历

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

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

你可能感兴趣的:(数据结构与算法,leetcode)