给定一个具有从1到a.length的数字的数组,我如何找到第二个索引具有最小索引的第一个重复数字?

时间:2019-07-09 13:05:59

标签: javascript arrays

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

  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;
}

3 个答案:

答案 0 :(得分:0)

您可以创建一个空的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]))

答案 1 :(得分:0)

您可以将值作为键的对象作为对象,并检查该值是否曾被查看过。

function getFirstDuplicate(array) {
   var seen = Object.create(null),
       i = 0,
       value;
   
   for (i = 0; i < array.length; i++) {
       value = array[i];
       if (seen[value]) return value;
       seen[value] = true;
   }
   return -1;
}

console.log(getFirstDuplicate([1, 7, 3, 5, 4, 2, 9, 3]));
console.log(getFirstDuplicate([1, 7, 3, 5, 4, 2, 9, 6]));

答案 2 :(得分:0)

我们只是在遍历数组时将内容推入对象。第一次出现时,我们将其设置为true,如果找到true,则知道我们找到了第一个重复项。

(25.0 / 24.0).floor  # => 1
(-25.0 / 24.0).floor # => -2