題目描述:
給定一個一維數組,將其中為0的元素刪除掉,非零元素的相對位置保持不變,最終目標數組保留在原數組中,並且目標數組長度之外的元素全部置為0。
解題思路:
(1)數組非零元素往前移動,時間復雜度O(n)。
思路:先將非0的元素往前靠,最后再將剩下的位置重置為0。
1 public void moveZeroes(int[] nums) { 2 if(nums.length < 1) 3 return ; 4 int Index = 0; 5 for (int i=0; i<nums.length; i++){ 6 if(0 != nums[i]){ 7 nums[Index++] = nums[i]; 8 } 9 } 10 for(int i=Index; i<nums.length; i++){ 11 nums[i] = 0; 12 } 13 14 }
利用兩個指針,交換位置。時間復雜度O(n)。
思路:可以用兩個指針,第一個指針永遠指向從左往右為0的元素,第二個指針為遍歷指針,當遍歷指針指向的值為非0的時候,將這個元素與第一個指針指向的元素交換。
1 public void moveZeroes(int[] nums) { 2 //first指針永遠指向當前為0的元素 3 int first = 0; 4 5 for (int second = 0; second < nums.length; second++) { 6 //為0的和非0的交換 7 if (nums[second] != 0) { 8 int temp = nums[first]; 9 nums[first] = nums[second]; 10 nums[second] = temp; 11 first++; 12 } 13 } 14 }
