每天学习一点算法 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)