80. 删除有序数组中的重复项Ⅱ

快慢指针

解题思路

  1. 数组是有序的,那么重复的元素一定会相邻;

    • 比较 rightleft - 2 位置的元素是否相等;
    • 相等 right 后移 1 位;
    • 不相等则将 right 位置的元素复制到 left 位置上,right 后移一位,left 后移一位;
  2. 重复上述过程,直到 right 等于数组长度;返回 left 即为新数组长度;

复杂度

  1. 时间复杂度:O(n)

  2. 空间复杂度:O(1)

代码实现

function removeDuplicates(nums) {
    let K_TIME = 2; // 出现两次的元素,可通用成 k 次
    if (nums.length <= K_TIME) return nums.length;

    let left = K_TIME;
    let right = K_TIME;

    while (right < nums.length) {
        if (nums[left - K_TIME] != nums[right]) {
            nums[left++] = nums[right];
        }
        right++
    }

    return left;
}
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 快慢指针
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现