【发布时间】:2021-01-27 04:33:45
【问题描述】:
我试图了解为什么我对这个问题的解决方案只是部分有效。
问题:
给定一个排序数组 nums,就地删除重复项,使每个元素只出现一次并返回新长度。
不要为另一个数组分配额外的空间,您必须通过使用 O(1) 额外内存就地修改输入数组来做到这一点。
我的解决方案:
var removeDuplicates = function(nums) {
if (nums.length === 0) return 0;
for (let i = 1; i <= nums.length; i++){
if(nums[i] === nums[i-1]){
nums.splice(nums[i], 1);
}
}
return nums.length;
};
这是我在 leetcode 上得到的结果,但我不明白为什么我的解决方案停止工作并且“3s”没有被删除?
输出截图:
【问题讨论】:
-
您迭代 forward 并删除项目。每次移除时,该项目之后 的所有内容都会移回一个插槽。所以,如果你得到一个像
[15, 19, 19, 19, 21]这样的数组,你会发现索引 1 和 2 相同,删除一个,那么索引 2 中的 new 项就是旧索引 3 中的19。但是,您只需增加计数器i而从不检查它,而是检查(新)索引 2 和 3。
标签: javascript arrays