方法:快慢双指针
一个快指针,向右走遇到非0的和慢指针交换,从而实现,将0全都移到尾部(将0全都移到尾部,实际上也是将非0的数全都移动到头部,且需要保持相对位置不变)
如果整个数组都没有0,则快慢指针速度保持一直,即自己和自己交换,所以数组不变
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length,left = 0, right = 0;
while(right < n){
if(nums[right] != 0){
swap(nums,left,right);
left++;
}
right++;
}
}
public void swap(int[] nums,int left,int right){
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}
时间复杂度为O(n)