給你一個?非嚴格遞增排列?的數組?nums
?,請你原地刪除重復出現的元素,使每個元素只出現一次,返回刪除后數組的新長度。元素的相對順序應該保持一致。然后返回?nums
?中唯一元素的個數。
考慮?nums
?的唯一元素的數量為?k
?,你需要做以下事情確保你的題解可以被通過:
- 更改數組?
nums
?,使?nums
?的前?k
?個元素包含唯一元素,并按照它們最初在?nums
?中出現的順序排列。nums
?的其余元素與?nums
?的大小不重要。 - 返回?
k
?。
示例 1:
輸入:nums = [1,1,2] 輸出:2, nums = [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]
解釋:函數應該返回新的長度5,
并且原數組 nums 的前五個元素被修改為 0, 1, 2, 3, 4。
不需要考慮數組中超出新長度后面的元素。
?解題思路:由于有要求原地刪除,所以空間復雜度必須為O(1),這里我們使用雙指針
初始狀態:
比較過程:
實現代碼:
/*** @param {number[]} nums* @return {number}*/
var removeDuplicates = function (nums) {const n = nums.lengthif (n == 0) return 0let fast = 1, slow = 1while (fast < n) {if (nums[fast] !== nums[fast - 1]) {nums[slow] = nums[fast]++slow}++fast}return slow
};