题目:
双指针想法:
i 指针在数组不为 0 的地方停留,j 指针在每个地方停留,依次交换 i 和 j 指针。当 i 指针遍历完所有数组元素时,j 指针指向的元素及后面的元素都为0。
代码如下:
C++版本
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int i=0;
int len=nums.size();
for(int j=0;j<len;j++){
while(i<len && nums[i]==0){
i++;
}
if(i==len){
for(int k=j;k<len;k++){
nums[k]=0;
}
break;
}
swap(nums[i++],nums[j]);
}
}
};
python版本:
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i=0
len_nums=len(nums)
for j in range(len_nums):
while i<len_nums and nums[i]==0:
i+=1
if i==len_nums:
for k in range(j,len_nums):
nums[k]=0
break
nums[i],nums[j]=nums[j],nums[i]
i+=1