我正在处理Leet代码挑战,试图从一个按升序排序的整数数组中删除所有重复项。
因此,例如[1,1,1,2,3,4,5,5]应该返回[1,2,3,4.5]。
我已经用一种方法解决了这个问题,但根据下面的代码,我尝试了一种不同的方法,但它似乎总是返回一个空数组[]。
有人能告诉我为什么它总是返回一个空数组吗?
var removeDuplicates = function(nums) {
for(let i = 0; i < nums.length; i++) {
let counter = 0;
for(let x = i + 1; x < nums.length; x++) {
// Remove element if above is true
if(nums[i] == nums[x]) {
counter++;
}
}
nums.splice(i + 1, counter);
}
return nums;
};
console.log(removeDuplicates( [1,1,1,2,2,3,4,5,5,5] ));
您将得到一个空数组,因为您的算法是错误的。只有当相似的数字并排时,你的算法才会正确工作。例如:
[1,1,1,2,2,5,5,5,5,5,3,3]
否则它将无法正常工作。
有很多算法可以从数组中删除重复的值。请进行简单的搜索以找到它们。但您可以通过以下方式轻松删除数组中的重复值:
function removeDuplicates(numbers) {
return [...new Set(numbers)];
}
或者:
function removeDuplicates(numbers) {
return numbers.filter((num, index, self) => index === self.indexOf(num));
}