【问题标题】: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) 中得到不同的结果,即使它们应该返回相同的答案或者我在这里错了。

标签: javascript duplicates


【解决方案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 明白了你的意思,我已经更新了我的答案。
    • 完美。它现在可以正常工作。感谢您的宝贵时间和帮助!
    猜你喜欢
    • 2022-01-20
    • 2016-10-01
    • 2016-01-24
    • 2021-11-12
    • 2021-01-27
    • 2021-12-12
    • 2022-01-03
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多