80.删除有序数组中的重复项II
链接:80.删除有序数组中的重复项II
难度:Medium
标签:数组、双指针
简介:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
题解 1 - typescript
- 编辑时间:2021-04-06
- 执行用时:104ms
- 内存消耗:40.1MB
- 编程语言:typescript
- 解法介绍:检测到一个重复数就后移。
function removeDuplicates(nums: number[]): number {
  const len = nums.length;
  const remove = (index: number) => {
    const num = nums[index];
    nums.splice(index, 1);
    nums.push(num);
  };
  let lastIndex = len;
  for (let i = 0; i < lastIndex - 1; i++) {
    const num = nums[i];
    if (nums[i] !== nums[i + 1]) continue;
    while (i + 2 < lastIndex && nums[i + 2] === num) {
      remove(i);
      lastIndex--;
    }
  }
  return lastIndex;
}
题解 2 - typescript
- 编辑时间:2021-04-06
- 执行用时:92ms
- 内存消耗:39.7MB
- 编程语言:typescript
- 解法介绍:利用快慢指针,慢指针赋值,快指针读取最新值。
function removeDuplicates(nums: number[]): number {
  const len = nums.length;
  if (len <= 2) return len;
  let slow = 2;
  for (let fast = 2; fast < len; fast++) {
    const num = nums[fast];
    if (nums[slow - 2] !== num) {
      nums[slow++] = num;
    }
  }
  return slow;
}