题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
思路
- 使用双指针left、right。left首先指向第一个元素,如果right不为0,那么right把值覆盖到left上,left和right同时向后移动一个位置。如果right为0,则right向右继续移动。
- 当right移出数组之后,将left后的元素都置为0。
代码
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int left = 0;
int right = 0;
while ( right < nums.size() ) {
if ( nums[right] != 0 )
nums[left++] = nums[right];
++right;
}
while ( left < nums.size() )
nums[left++] = 0;
return;
}
};