題目
給定一個整數陣列 nums
,要求刪除重複項,並且元素的相對順序應保持相同,最後回傳 nums 中唯一元素的數量。
需要注意的是題目要求 in-place,所以不能新增其他的陣列來保存結果。
這題解法和 [LeetCode] 27. Remove Element (JS) 差不多,不過判斷式需要修改一下。
解法
- 使用
pointer
來遍歷陣列中的每一個元素。 - 檢查 nums 中第一次出現
nums[index]
這個數的索引是否等於當前遍歷到的索引- 是:這個數之前沒出現過,可以保留,把這個元素放到
nums[pointer]
,然後移動pointer
。 - 否:這個數之前已經出現過,需刪除。
- 是:這個數之前沒出現過,可以保留,把這個元素放到
- 遍歷完陣列後,
pointer
的位置就是新陣列的長度,即去除重複的元素個數。
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
let pointer = 0
for (let index = 0; index < nums.length; index++) {
if (nums.findIndex(i => i === nums[index]) === index) {
nums[pointer] = nums[index]
pointer++
}
}
return pointer
};
送出時只會檢查 nums 前 n 個元素是否符合題目需求(n = 你最後回傳的個數)