26. Remove Duplicates from Sorted Array
题目简介
/**
* @param {number[]} nums
* @return {number}
*/
题目要求我们把一个排序好的递增数组 nums 在数组内部去重
最后返回数组内不同元素的个数,nums 中的不同元素必须在前面部份
解题思路
要解答这题我们首先需要一个指针 i 用来遍历整个数组
其次,为了将当前遍历到的新元素替换前面遇到的重复元素,我们需要另一个指针 dup 来指向数组最左边重复的元素
所以这道题我们需要用到双指针中的快慢指针
所以这个问题就变成了我们要如何操作我们的两个指针呢?
首先我们从数组元素来逐个判断:
- 第一个元素必定是新元素,所以它不可能是重复元素
- 数组的第二个元素有可能是重复元素,所以我们指向重复元素的慢指针 dup 初始值应该是指向第二个元素(也就是下标 1)
- 如果第二个元素是重复元素(通过
nums[dup - 1] === nums[i]判断)我们只需要更新 i 指针 - 如果第二个元素不是重复元素,我们需要做两件事:
- 将当前 i 指针指向的值(也就是新的元素)赋值给下标 dup 的元素
- 更新 dup 指针的位置
Javascript
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function (nums) {
// 'dup' points to the position where the next unique element should be placed
let dup = 1
for (let i = 1; i < nums.length; i++) {
// If the current element is different from the previous unique one,
// move it to the 'dup' position and advance 'dup'
if (nums[dup - 1] !== nums[i]) {
nums[dup] = nums[i]
dup++
}
}
return dup
};