【发布时间】:2020-07-07 15:02:45
【问题描述】:
免责声明
我很清楚重复的问题,但是这个问题要求在不创建新数组的情况下删除重复项,并希望我们改变原始数组。
说明
给定一个排序数组 nums,就地删除重复项,使每个元素只出现一次并返回新长度。
不要为另一个数组分配额外的空间,您必须通过使用 O(1) 额外内存就地修改输入数组来做到这一点。
示例
给定nums = [1,1,2],
您的函数应返回长度 = 2,nums 的前两个元素分别为 1 和 2。
您在返回的长度之外留下什么并不重要。
尝试
const removeDuplicates = function(nums) {
for(let i of nums){
if(nums[i] === nums[i]){
nums.splice(i, 1)
}
}
return nums.length;
};
console.log(removeDuplicates([1, 1, 2]));
console.log(removeDuplicates([1, 2]));
// [1, 1, 2] => [1, 2] (Correct)
// [1, 2] => [1] (Incorrect - should be [1, 2])
我是否使用 splice 正确地改变了数组,我需要做什么来更正第二个参数?
另外,在 leetcode 中,当我运行第一个参数时,它说它是正确的并返回剩余元素的数组,但指令要求新数组的长度。不确定我是否遗漏了什么,但为什么它没有返回长度?
【问题讨论】:
-
splice应该采用您要删除的值的索引,而不是值本身。尝试将您的数组更改为[3, 3, 2],看看会发生什么。 -
@HereticMonkey 给我
2 -
if(nums[i] === nums[i])始终为真。 -
@Kosh 所以把它改成
nums[i + 1]? -
是的。更改为
i+1
标签: javascript arrays duplicates