Javascript 我试着把数字放入数组中,而不放重复的数字
我的代码返回长度为0。从数组中排除重复项后,它应该返回5。我想我在代码中遗漏了一些我没有想到的东西。有人能快速回顾一下并告诉我遗漏了什么吗?我更希望在解决方案中使用我的代码,而不是全新的代码。多谢各位 问题: 给定已排序的数组nums,删除重复项 使每个元素只出现一次并返回新长度 不要为另一个数组分配额外空间,必须这样做 通过使用O(1)个额外内存就地修改输入阵列Javascript 我试着把数字放入数组中,而不放重复的数字,javascript,arrays,Javascript,Arrays,我的代码返回长度为0。从数组中排除重复项后,它应该返回5。我想我在代码中遗漏了一些我没有想到的东西。有人能快速回顾一下并告诉我遗漏了什么吗?我更希望在解决方案中使用我的代码,而不是全新的代码。多谢各位 问题: 给定已排序的数组nums,删除重复项 使每个元素只出现一次并返回新长度 不要为另一个数组分配额外空间,必须这样做 通过使用O(1)个额外内存就地修改输入阵列 const number=[0,0,1,1,1,2,2,3,3,4] const removeDuplicates=(nums)=>
const number=[0,0,1,1,1,2,2,3,3,4]
const removeDuplicates=(nums)=>{
nums.sort()
const newArr=[]
//或者只是数一数有多少个数字,不包括重复的数字
for(设i=0;i
要就地执行,必须使用array.splice()。大概是这样的:
let i = numbers.length - 1
do {
let x = numbers.indexOf(numbers[i])
if ( x !== i ) {
numbers.splice(x,1)
}
i -= 1
} while ( i > 0 )
代码中的问题是这一行:
if(!nums[i] === nums[j]){
您可能打算:
if(nums[i] !== nums[j]){
也就是说,嵌套for循环的逻辑有问题。这可能是您的意图:
const number=[0,0,1,1,1,2,2,3,3,4]
const removeDuplicates=(nums)=>{
nums.sort((a,b)=>a-b);
常数newArr=[];
设prev=-无穷大;
对于(设i=0;i,您可以使用来实现这一点
const numbers = [0,0,1,1,1,2,2,3,3,4]
const reducer = (accumulator, currentValue) => {
if(accumulator.indexOf(currentValue) === -1){
return [...accumulator, currentValue]
}
return accumulator
}
const removeDuplicates = arr => arr.reduce(reducer, []);
removeDuplicates(numbers) // -> output [0, 1, 2, 3, 4 ]
您不应该创建新数组:在适当的位置删除重复项
您已经获得一个排序数组,调用.sort()
它不仅会导致不必要的计算复杂度增加,而且也不会正确排序。问题陈述还明确指出不要创建新数组,但这就是您正在做的。我进行了排序,以防传入函数的数组不是sortedHi Rahul,感谢您的更正。您能解释一下-Infinit吗y&continue part?prev=-Infinity;
仅将变量初始化为您的输入数组不包含的值。如果当前数字与上一个数字不同,我们将继续下一个值。否则,我们将其添加到newArr
中。是的,它可以工作!谢谢!您能否发送一个链接,进一步解释-Infinity是什么呃?