题目简述:每个元素最多出现两次,多余两次则过滤掉,只能在原数组上进行操作
var removeDuplicates = function (nums) {
let cnt = 0
let slow = 0
let last = nums[0] // 存储上一个元素的值
for (let i = 0; i < nums.length; ++i) {
// 当前元素跟上一元素相等
if (nums[i] === last) {
// 且计数小于 2
if (cnt < 2) {
cnt++
// 进行赋值
nums[slow++] = nums[i]
}
// 遇到 cnt > 2的情况不进行操作
// 继续下一个元素 i++
// 直至找到不相等的元素
} else {
// 如果不相等,表示遇到一个新的元素了
// 更新last
last = nums[i]
// 进行赋值
nums[slow++] = nums[i]
// 计数器更新
cnt = 1
}
}
return slow
};
fast始终跟 slow指向的前两个元素做比较 如果相等 nums[fast] === nums[slow - 2],那么就不做处理,fast++,直至找到下一个不相等的元素,找到之后,然后进行赋值 nums[slow++] = nums[fast]
var removeDuplicates = function(nums) {
if (nums.length <= 2) return nums.length;
let slow = 2; // 因为我们允许最多两个重复项,所以从索引 2 开始
for (let fast = 2; fast < nums.length; fast++) {
if (nums[fast] !== nums[slow - 2]) {
nums[slow++] = nums[fast];
}
}
return slow;
};