Skip to content

[leetcode]80.删除排序数组的重复项2 #32

@MagicalBridge

Description

@MagicalBridge

这道题目和26题的一个进阶版本,本题要求的是在排序数组中元素最多可以出现2次,如果一个元素出现次数超出两次,需要原地进行删除,这道题目前提条件是数组都是有序的,且是递增的,从这里可以知道,重复的元素都是排列在一起出现的。

根据条件我们可以举一个例子:

一个数组 数组中出现放入元素。
1、2、3 这种情况下是符合要求的,
1、1、2、3 这种情况下也是符合要求的。
1 1 1 2 3 这种数据格式就是不符合需求的。

这道题目的整体思路还是双指针, 这里有一个小的技巧。我们需要创建一个指针P,这个指针从索引为2的地方开始向后移动。
p指向第一个无效位置,什么是无效的位置, 还是以 1 1 1 2 3 这个数组来说 因为数组已经排序了,即使前两个是重复的也是有效的,所以这个p指向的是第一个我们需要更新的位置,第三个 1 也就是索引为2的位置,就是无效的,也就是需要处理的位置。

将不重复的元素覆盖当前这个无效的位置元素,并且将P的索引更新。

var  removeDuplicates = function(nums) {
  let p = 2;
  for(let i = 2; i < nums.length; i++) {
    if (nums[i] !== nums[p - 2]) {
      nums[p] = nums[i];
      p++;
    }
  }
  return p
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions