題目描述:
意思是將所有0移到最后的同時其余非0元素位置仍然不變
如? 1 2 0 5 2 0 經過移動零后變為 1 2 5 2 0 0
思路:使用雙指針的思路來寫
fast:從左往右遍歷數組
slow:非零元素最后的一個位置
將數組分為3個區間
[0,slow]為處理好的非0數據,slow永遠指向最后一個非0數據
[slow+1,fast]處理好的為0的數據
[fast+t,arr.length-1]為待處理的數據
做法:
1.fast遇到0元素:fast++
2.fast遇到非0元素:slow++,然后交換數據,最后fast++
public void moveZeroes(int[] nums) {int fast = 0;int slow = -1;for(fast = 0; fast < nums.length; fast++){if(nums[fast] != 0){slow++;// 交換數據int tmp = nums[slow];nums[slow] = nums[fast];nums[fast] = tmp;}}}