目录
1,题目-中等
给你一个有序数组 nums
,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
2,代码
双指针
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
const n = nums.length;
if(n<2){
return n;
}
let first = 2;
let second =2;
while(second<n){
if(nums[first-2] != nums[second]){
nums[first++] = nums[second];
}
second++;
}
return first;
};
3,学习与总结
思路学习与整理---重点学习 理解与运用
给定数组是有序的,所以相同元素必然连续;
使用两个指针,first指针处理处数组的长度,second指针表示已经检查过的数组长度;
nums[second]表示待检测的第一个元素 ,nums[first-1]表示上一个应该被保留的元素;
本题要求元素最多出现两次,所以要检查nums[first -2]和nums[second]是否相等;
当且仅当 nums[first−2]=nums[second]时,当前待检查元素 nums[fast]不应该被保留,不做赋值操作,仅仅second++,继续筛选可以被保留的元素;
勉励自己:贵在坚silu