题目:
双指针想法:
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=0len_nums=len(nums)for j in range(len_nums):while i<len_nums and nums[i]==0:i+=1if i==len_nums:for k in range(j,len_nums):nums[k]=0breaknums[i],nums[j]=nums[j],nums[i]i+=1