给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
法一:快慢指针
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int i=0,j=0;
for(;i<nums.size();i++){
nums[j]=nums[i];
if(nums[i]!=0){
j++;
}
}
for(;j<nums.size();j++){//这里从j开始。如果nums的最后一个元素为0,则0赋值给j;如果nums的最后一个元素非0,则赋值给j,然后j自加1。所以无论如何,在上一个循环结束后,j都是定位到0的,且之后的nums元素都是需要被0覆盖,所以从j开始赋值0。
nums[j]=0;
}
}
};