题目


80 题的简单版本:LeetCode26 删除有序数组中的重复项,不同之处是 26 题不允许有任何重复项,而本题一个元素可以最多出现两次。
解题
解题一:快慢指针

// javascript
var removeDuplicates = function(nums) {
const n = nums.length;
if (n <= 2) return n; // 长度不超过 2 的数组无需处理
let slow = 2, fast = 2; // 处理长度 > 2 的数组
while (fast < n) {
if (nums[fast] !== nums[slow - 2]) {
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
};

通用模板
26题 和 80题的通用模板如下:26题 k = 1,80题 k = 2,如果可以允许每个元素最多出现 m 次,让 k = m 就行。
// javascript
var removeDuplicates = function(nums) {
return process(nums, 2);
};
const process = (nums, k) => {
const n = nums.length;
if (n <= k) return n;
let fast = k, slow = k;
while (fast < n) {
if (nums[fast] !== nums[slow - k]) {
nums[slow] = nums[fast];
++slow;
}
++fast;
}
return slow;
};
版权声明:本文为weixin_45561634原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。