Skip to content

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

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

代码

javascript
// 80. 删除有序数组中的重复项 II:https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/
// 输入:nums = [1,1,1,2,2,3]
// 输出:5

export function removeDuplicatesFromSortedArrayIi (nums) {
  const map = new Map()
  for (let i = 0; i < nums.length; i++) {
    if (map.has(nums[i])) {
      if (map.get(nums[i]) >= 2) {
        nums.splice(i, 1)
        i--
      }
      map.set(nums[i], map.get(nums[i]) + 1)
    } else {
      map.set(nums[i], 1)
    }
  }
  return nums.length
}
typescript
// 80. 删除有序数组中的重复项 II:https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/
// 输入:nums = [1,1,1,2,2,3]
// 输出:5

export function removeDuplicatesFromSortedArrayIi (nums: number[]): number {
  const map = new Map()
  for (let i = 0; i < nums.length; i++) {
    if (map.has(nums[i])) {
      if (map.get(nums[i]) >= 2) {
        nums.splice(i, 1)
        i--
      }
      map.set(nums[i], map.get(nums[i]) + 1)
    } else {
      map.set(nums[i], 1)
    }
  }
  return nums.length
}

测试代码

ts
import { expect, test } from 'vitest'
import { removeDuplicatesFromSortedArrayIi } from './typescript.ts'
import { removeDuplicatesFromSortedArrayIi as removeDuplicatesFromSortedArrayIiJs } from './javascript.js'

test(`removeDuplicatesFromSortedArrayIi`, () => {
  const nums = [1,1,1,2,2,3]
  expect(removeDuplicatesFromSortedArrayIi(nums)).toBe(5)
  expect(nums).toEqual([1,1,2,2,3])

  const nums2 = [0,0,1,1,1,1,2,3,3]
  expect(removeDuplicatesFromSortedArrayIi(nums2)).toBe(7)
  expect(nums2).toEqual([0,0,1,1,2,3,3])
})

test(`removeDuplicatesFromSortedArrayIiJs`, () => {
  const nums = [1,1,1,2,2,3]
  expect(removeDuplicatesFromSortedArrayIiJs(nums)).toBe(5)
  expect(nums).toEqual([1,1,2,2,3])

  const nums2 = [0,0,1,1,1,1,2,3,3]
  expect(removeDuplicatesFromSortedArrayIiJs(nums2)).toBe(7)
  expect(nums2).toEqual([0,0,1,1,2,3,3])
})