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
};

题解合集

Powered By Valine
v1.5.2