LeetCode-探索-初级算法-数组-8. 移动零(个人做题记录,不是习题讲解)
-
语言:java
-
思路:用两个指针,一个指向0的位置,一个查找非0位置;如果0指针到尾部,说明替换完了,如果非0指针到尾部,说明没得替换了,也就是替换完了。
-
代码(0ms):
class Solution { public void moveZeroes(int[] nums) { int i = 0; int j = 0; int len = nums.length; while(j<len&&i<len){ if(nums[i]==0){ if(nums[j]==0) ++j; else{ nums[i] ^= nums[j]; nums[j] ^= nums[i]; nums[i] ^= nums[j]; ++i; ++j; } }else{ ++i; ++j; } } } }
-
参考代码(0ms):空间换时间,不用替换,最后在统一赋值一遍
class Solution { public void moveZeroes(int[] nums) { int[] arr = new int[nums.length]; int index = 0 ; for (int i = 0 ; i < nums.length ; i ++){ if(nums[i]!=0){ arr[index++] = nums[i]; } } for (int i = 0 ; i < index ; i ++){ nums[i] = arr[i]; } for (int i = index; i < nums.length ; i ++){ nums[i] = 0 ; } } }
-
参考后重写(1ms):不是很懂参考代码的手动赋值0为什么会比默认0运行快。
class Solution { public void moveZeroes(int[] nums) { int len = nums.length; int[] arr = new int[len]; for(int i = 0,j = 0;i<len;++i){ if(nums[i]!=0) arr[j++] = nums[i]; } for(int i = 0;i<len;++i){ nums[i] = arr[i]; } } }