leetcode283. 移动零

Posted SANS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;    
        }
    }
};

 

以上是关于leetcode283. 移动零的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 283. 移动零c++/java详细题解

前端与算法 leetcode 283. 移动零

LeetCode刷题283-简单-移动零

LeetCode283.移动零

LeedCode 283. 移动零

leetcode-283-移动零