LeetCode 80 Remove Duplicates from Sorted Array II
給定一個數組,刪除其中的重複元素,使重複項最多出現兩次,然後返回新的長度,要求 O(1) 空間複雜度。
例 1:
給予 nums = [1, 1, 1, 2, 2, 3], 你的函式應該返回 length = 5,前五個元素分別為 1, 1, 2, 2, 3.
例 2:
給予 nums = [0, 0, 1, 1, 1, 1, 2, 3, 3], 你的函式應該返回 length = 7,前五個元素分別為 0, 0, 1, 1, 2, 3, 3.
解法
和 LeetCode 26 Remove Duplicates from Sorted Array 這道題比較類似。
定義變數 k,表示待修改的元素位置,預設為 0,然後遍歷後面的元素判斷符合條件時,覆蓋 k,然後 k 向後移動一位。
判斷條件為:
- 遍歷的元素 n 不等於元素 k,也就代表不重複
- 遍歷的元素 n 等於元素 k,但不等於 k - 1。則表示已經有兩個重複元素了
- 對於第二點,需要注意,當 k = 0 時,沒有 k - 1。
class Solution { public int removeDuplicates(int[] nums) { int k = 0; for (int i = 1; i < nums.length; i++) { if (nums[i] != nums[k] || k == 0 || (nums[i] == nums[k] && nums[i] != nums[k - 1])) { nums[++k] = nums[i]; } } return k + 1; } }
Runtime: 6 ms, faster than 95.36% of Java online submissions for Remove Duplicates from Sorted Array II.