LeetCode 283:移动零

LeetCode 283:移动零
LeetCode 283:移动零_第1张图片

解法:双指针

思路一:

覆盖,需要对数组中的每个元素操作一次(前面非零数复制,后面补零)

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

思路二:

交换,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。只需要操作 非零元素的个数 次,复杂度相同

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

你可能感兴趣的:(LeetCode,leetcode)