解题思路
双指针
上面的算法对于整个数组都是分0元素的情况下,需要非0元素自己与自己交换,浪费时间。
可以考虑当前指针和非0元素指针不相等的情况才进行交换,否则只是更改非0元素指针
public void moveZeroes(int[] nums) {int k = 0; // nums中, [0...k)的元素均为非0元素// 遍历到第i个元素后,保证[0...i]中所有非0元素// 都按照顺序排列在[0...k)中// 同时, [k...i] 为 0for(int i = 0 ; i < nums.length ; i ++)if(nums[i] != 0)if(k != i)swap(nums, k++, i);elsek ++;}private void swap(int[] nums,int i,int j){int temp = nums[i];nums[i]=nums[j];nums[j]=temp;}
