首页 > 解决方案 > 给定一个数字从 1 到 a.length 的数组,我如何找到第二次出现的索引最小的第一个重复数字?

问题描述

我正在尝试以下代码,但它似乎无法正常工作。
这些是我的测试:

  1. 输入 =2,1,3,5,3,2
    预期输出 = 3;
  2. 输入 =2,4,3,5,1
    预期输出 = -1
  3. 输入 =2,4,3,5,1,7

这是代码

function FirstDuplicate(array) {
    var a = [5, 2, 3, 4, 2, 6, 7, 1, 2, 3];
    var firstDuplicate = "";
    for (var i = 0; i < a.length; i++) {
        for (var b = i + 1; b < a.length; b++) {
            if (a[i] === a[b])
                firstDuplicate = a.indexOf(a[i]);
            break;
        }
    }
    return firstDuplicate;
}

标签: javascriptarrays

解决方案


您可以创建一个空Set并继续添加已传递给该的元素Set。如果出现一个已经存在的数字,Set那么return

function FirstDuplicate(array) {
    let passed = new Set();
    for(let x of array){
      if(passed.has(x)) return x;
      passed.add(x);
    }
    return -1;
}

console.log(FirstDuplicate([2,1,3,5,3,2]))
console.log(FirstDuplicate([2,4,3,5,1]))
console.log(FirstDuplicate([2,4,3,5,1,7]))


推荐阅读