0%

LeetCode题解|26. 删除排序数组中的重复项

题目链接:26. 删除排序数组中的重复项

概述

题目给定一个排序数组,需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

思路

使用双指针p1p2,其中p1是慢指针、p2是快指针。
如果nums[p1] === nums[p2],我们就增加p2跳过重复项
如果nums[p1] !== nums[p2],说明已经跳过了所有重复项,所以我们需要把nums[p2]的值复制到nums[p1 + 1]中,并把p1往后移动。
直到p2 === nums.length时,算法结束。
因为p1指向的是不重复项的最后一个,因此,最终的数组长度就是p1 + 1

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
if (nums.length < 2) {
return nums.length
}
let p1 = 0
for (let p2 = 0; p2 < nums.length; p2++) {
if (nums[p1] !== nums[p2]) {
p1++
nums[p1] = nums[p2]
}
}
return p1 + 1
};

题解合集