【每天学习一点算法 2026/03/02】删除排序数组中的重复项

3 阅读1分钟

每天学习一点算法 2026/03/02

题目:删除排序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k。去重后,返回唯一元素的数量 k。

nums 的前 k 个元素应包含 排序后 的唯一数字。下标 k - 1 之后的剩余元素可以忽略。

1.set去重

我第一时间想到的当然就是Set去重 但是不是原地删除。。。但是很好用

function removeDuplicates(nums: number[]): number {
  nums = Array.from(new Set(nums))
  return nums.length
};

2.hasOwnProperty去重

利用对象的属性唯一性去重,同事可以记录每项出现的次数

function removeDuplicates(nums: number[]): number {
  let obj: Object = {}
  for (let i: number = 0; i < nums.length; i++) {
    if (obj.hasOwnProperty(nums[i])) {
      obj[nums[i]]++
      nums.splice(i, 1)
      i--
    } else {
      obj[nums[i]] = 1
    }
  }
  return nums.length
};

3.双指针

一个用来指向遍历下标,另一个表示不同元素存放位置下标

function removeDuplicates(nums: number[]): number {
  const length: number = nums.length
  let fast: number = 1
  let slow: number = 1
  while(fast < nums.length) {
    if (nums[fast] !== nums[fast - 1]) {
      nums[slow] = nums[fast]
      slow++
    }
    fast++
  }
  return slow
};

题目来源:力扣(LeetCode)