80. 删除排序数组中的重复项 II(JS实现)

1 题目

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定 nums = [1,1,1,2,2,3],
函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。
你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,0,1,1,1,1,2,3,3],
函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。
你不需要考虑数组中超出新长度后面的元素。

2 思路

这道题的思路主要考察双指针,一个指针i用于遍历整个数组,一个指针j用于构造新数组,当没有重复出现2次的数时,两个指针ij同时向后移动。当出现重复2次以上的数时,i指针向后移动寻找不同的数,而j指针位置暂时不动,当i指针找到目标数时,将其赋值j指针所在的位置,然后两指针继续同时向后移动,重复上述过程

3代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    if (nums.length <= 2) return 2;

    let i = 1;
    let j = 1;
    let count = 1;   //用于记录某个数重复的次数
    while(i < nums.length) {
        if (nums[i-1] === nums[i]) {
            if (++count > 2) {   //当重复超过2次时,i指针开始向后寻找不同的数
                i++;
                continue;
            }
        } else {    //找到不同的数,计数重归为1
            count = 1;
        }
        nums[j++] = nums[i++];
    }

    return j;
};

猜你喜欢

转载自blog.csdn.net/zjw_python/article/details/106772364