leetcode283 移动零——双指针

官方双指针题解:
应始终保持右指针到左指针均为零;左指针左边为非零。
这样右指针移动到最右边,左右指针维护的区间就是0,即所有零都移动到右侧了。

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

我的解法:

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

双指针、单调性的思考:
具有单调性、利用双指针算法解答的一道典型例题

你可能感兴趣的:(算法设计与分析)