首页 > 解决方案 > 我如何有效地检查整数是否不在Javascript中的大量数组中

问题描述

我正在做一个任务,我必须找到大于 0 的最小正整数,它不在包含 100,000 个元素的巨大数组中。我能够做到,所以它是正确的,但显然我的解决方案花费的时间太长并返回超时错误。

这是我目前的解决方案:

function solution(A) {
    let min=1

    while(A.includes(min) === true){
        min++
    }

    return min
}

有没有更快的方法不涉及循环遍历每个元素?

编辑:哎呀,伙计们,我忘记了这个问题的关键要素!

编辑 2:最小值为 -2,最大值为 100,000,它们不按顺序排列

标签: javascriptalgorithmperformanceiteratorruntime-error

解决方案


您可以获取一个对象并将每个想要的值添加到该对象。

然后取最小的键并检查是否等于一并递增直到找不到键。否则返回一个。

function getSmallest(array) {
    let temp = Object.create(null),
        smallest;

    for (const v of array) if (v > 0) temp[v] = true;
    smallest = +Object.keys(temp)[0];

    if (smallest !== 1) return 1;

    while (temp[++smallest]);

    return smallest;
}

console.log(getSmallest([2, 1, 0])); // 3
console.log(getSmallest([2, 3, 0])); // 1


推荐阅读