leetcode-26 刪除排序陣列中的重複項(RemoveDuplicatesFromSortedArray)-java
阿新 • • 發佈:2019-01-27
題目:刪除排序陣列中的重複項
給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。
示例 1:
給定陣列 nums = [1,1,2], 函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為1,2. 你不需要考慮陣列中超出新長度後面的元素。
示例 2:
給定 nums = [0,0,1,1,1,2,2,3,3,4], 函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為0,1,2,3,4. 你不需要考慮陣列中超出新長度後面的元素。
public int removeDuplicates(int[] nums) { if (nums.length == 0) return 0; if (nums.length == 1) return 1; int m = nums[0]; int count = 0; int i = 1; while (i < nums.length) { if (nums[i] == m) { ++ count; } else { m = nums[i]; nums[i - count] = m; } ++ i; } returnnums.length - count; }
這裡一定要判斷nums.length == 0的情況//我沒進行判斷的時候出錯了,證明有 空陣列的測試用例
注意題目的條件:(1)有序陣列,(2)不需要考慮陣列中超出新長度後面的元素
變數註釋:
m //陣列的不重複的元素,也就是新陣列的元素,初始化為nums[0],每次記錄前一個不重複的元素
count //陣列重複的元素個數,初始化為0
i //迴圈下標,初始化為1,不需要判斷nums[0]
思路:
(1)因為是有序陣列,所以一個元素髮生重複,必是連續的,唯一的。
//例如[1,1,1,2],1發生重複,是連續的,也是唯一的,後面不會再出現1
(2)無視重複的元素,將不重複的元素m 放到 nums的0 - newLength中
//遍歷到重複的元素時,count++,繼續往後遍歷;
//遍歷到不重複的元素時,m = nums[i],作為新的m值,m應該在的位置是當前位置 減去 重複的元素個數 (i-count)
//即nums[i-count]=m;
//例如[0,0,1,1,1,2,2,3,3,4],m分別是0,1,2,3,4,將他們分別放到nums[0,1,2,3,4]
//返回newLength = nums.length - count