从排序数组中删除重复项(不同的最终结果)

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 明白了你的意思,我已经更新了我的答案。 完美。它现在可以正常工作。感谢您的宝贵时间和帮助!

以上是关于从排序数组中删除重复项(不同的最终结果)的主要内容,如果未能解决你的问题,请参考以下文章

从排序数组中删除重复项,不同代码方式的相同解决方案具有不同的输出

arts打卡 从排序数组中删除重复项

从 C++ 中的排序数组中删除重复项

从排序数组中删除重复项 Leetcode

从排序数组中删除重复项

从排序数组中删除重复项