题目描述
- 给你一个有序数组
nums,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 - 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
解题思路
- 双指针(快慢指针)
- 慢指针记录符合要求数组长度
- 快指针遍历数组
解题代码(JavaScript)
var removeDuplicates = function (nums) {
// 数组长度
let len = nums.length;
// 当数组长度小于等于二直接输出数组长度(根据题中描述到使得出现次数超过两次的元素只出现两次)
if (len <= 2) {
return nums.length;
}
// 慢指针
let slow = 2;
// 快指针
let fast = 2;
while (fast < len) {
if (nums[slow - 2] !== nums[fast]) {
// 快指针所指元素未超过两个
// 将慢指针元素替换为快指针元素
nums[slow] = nums[fast];
// 慢指针向右移动
slow++;
}
// 慢指针向前推两个元素值等于快指针元素,说明慢指针所指元素超过两个
// 快指针向右继续遍历
fast++;
}
return slow;
};