从排序数组中删除重复项(不同的最终结果)
Posted
技术标签:
【中文标题】从排序数组中删除重复项(不同的最终结果)【英文标题】:Remove Duplicates from Sorted Array (different final results) 【发布时间】:2021-10-23 15:13:30 【问题描述】:我是编程和学习 javascript 的新手,通过 leetcode.com
做一些练习。
我想编写一个代码来删除排序数组中的重复项。
当我在函数末尾使用“console.log”来显示最终结果时,我得到了预期的结果。但是,当我使用 return (具有相同的变量)时,我得到了错误的结果。谁能告诉我,我哪里出错了?
Hier 是我的代码:
/**
* @param number[] nums
* @return number
*/
var removeDuplicates = function (nums)
var newNums = []
if (nums.length == 0)
newNums = []
for (var i = 0; i < nums.length; i++)
var curr = nums[i]
var next = nums[i + 1]
if (curr != next)
newNums.push(curr)
console.log(newNums)
return newNums
;
这是一张带有代码和结果的图片。绿色箭头显示 (console.log) 的输出,红色箭头显示 (return) 的输出。 先感谢您!
【问题讨论】:
在这里提问之前也可以在谷歌上搜索。这是你的answer 您的代码有效。如果你像这样调用函数console.log(removeDuplicates([1,2,2,3]))
将返回与console.log 相同的内容
顺便说一句,if (nums.length == 0)
是多余的。你可以提前退出但不分配数组,你已经有了。
看看this解决方案。
谢谢大家的回复。我已经看到了多种解决问题的方法。但是这个是我自己写的。我只是想了解,为什么我在 (return newNums
) 和 consloe.log(newNums
) 中得到不同的结果,即使它们应该返回相同的答案或者我在这里错了。
【参考方案1】:
一种稍微不同的方法,保留对数组的原始对象引用,并通过复制和调整数组的长度来改变数组。
这种方法不需要另一个数组。
它基本上检查前任是否不等于实际项目并将项目复制到新索引j
。此变量具有数组的最终长度,并截断不需要的数组其余部分。
function removeDuplicates(array)
let j = 0;
for (let i = 0; i < array.length; i++)
if (array[i - 1] !== array[i]) array[j++] = array[i];
array.length = j;
return array;
console.log(removeDuplicates([0, 1, 1, 2, 2, 2, 2, 3, 4, 5, 5]));
【讨论】:
【参考方案2】:以下是如何在 Javascript 中删除任何(已排序或未排序)数组中的重复项
const removeDuplicates = (orignalArray) =>
let allUniqueArray=[];
let repWordArray=orignalArray.slice();
const removeAnElement=(array, elem)=>
const index = array.indexOf(elem);
if (index > -1)
array.splice(index, 1);
return array;
orignalArray.forEach(elem=>
if(!allUniqueArray.includes(elem))
allUniqueArray.push(elem);
repWordArray=removeAnElement(repWordArray,elem)
);
return allUniqueArray;
;
let array=[1,2,3,3,4,5,6,6,7];
const uniqueArray = removeDuplicates(array);
console.log('array: ',array);
console.log('uniqueArray: ',uniqueArray);
【讨论】:
感谢您的帮助!但是,您编写的代码完全删除了重复的数字。例如 [1,1,1,1] -> 它返回 [ ]。但是,它应该做的只是删除重复项(重复)。正确答案应该是 [1]。 @Hamzah 明白了你的意思,我已经更新了我的答案。 完美。它现在可以正常工作。感谢您的宝贵时间和帮助!以上是关于从排序数组中删除重复项(不同的最终结果)的主要内容,如果未能解决你的问题,请参考以下文章