leetcode283. 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        vector<int>::size_type nonZero = 0;
        vector<int>::size_type next = 0;
        while (next < nums.size()) {
            if (nums[next] != 0) {
                // 使用 std::swap() 会带来 8ms 的性能损失
                // swap(nums[next], nums[nonZero]);
                auto tmp = nums[next];
                nums[next] = nums[nonZero];
                nums[nonZero] = tmp;
                //用nums[next]^=nums[nonZero]^=nums[next]^=nums[nonZero]; WA
                //用nonZero++;next++;会增加8ms左右
                ++nonZero;
            }
            //next++;
            ++next;    
        }
    }
};

 

posted @ 2020-05-25 11:43  XXXSANS  阅读(122)  评论(0编辑  收藏  举报