【演算法】刪除一個數組中為0的元素
阿新 • • 發佈:2018-12-16
題目描述:
給定一個一維陣列,將其中為0的元素刪除掉,非零元素的相對位置保持不變,最終目標陣列保留在原陣列中,並且目標陣列長度之外的元素全部置為0。
解題思路:
(1)陣列非零元素往前移動,時間複雜度O(n)。
思路:先將非0的元素往前靠,最後再將剩下的位置重置為0。
實現程式碼:
public void moveZeroes(int[] nums) { if(nums.length < 1) return ; int Index = 0; for (int i=0; i<nums.length; i++){ if(0 != nums[i]){ nums[Index++] = nums[i]; } } for(int i=Index; i<nums.length; i++){ nums[i] = 0; } }
(2)利用兩個指標,交換位置。時間複雜度O(n)。
思路:可以用兩個指標,第一個指標永遠指向從左往右為0的元素,第二個指標為遍歷指標,當遍歷指標指向的值為非0的時候,將這個元素與第一個指標指向的元素交換。
public void moveZeroes(int[] nums) { //first指標永遠指向當前為0的元素 int first = 0; for (int second = 0; second < nums.length; second++) { //為0的和非0的交換 if (nums[second] != 0) { int temp = nums[first]; nums[first] = nums[second]; nums[second] = temp; first++; } } }
Reference: