给定一个数组 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; } } };