LeetCode80 删除有序数组中的重复项 II

LeetCode80 删除有序数组中的重复项 II

题目

在这里插入图片描述
在这里插入图片描述
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版权协议,转载请附上原文出处链接和本声明。