Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中,如何有效地检查整数是否不在大规模数组中_Javascript_Algorithm_Performance_Iterator_Runtime Error - Fatal编程技术网

在Javascript中,如何有效地检查整数是否不在大规模数组中

在Javascript中,如何有效地检查整数是否不在大规模数组中,javascript,algorithm,performance,iterator,runtime-error,Javascript,Algorithm,Performance,Iterator,Runtime Error,我正在做一个赋值,我必须找到一个大于0的最小正整数,它不在一个包含100000个元素的大数组中。我可以这样做,所以它是正确的,但显然我的解决方案需要的时间太长,并返回超时错误 这是我当前的解决方案: function solution(A) { let min=1 while(A.includes(min) === true){ min++ } return min } 有没有一种更快的方法不需要遍历每一个元素 编辑:哎呀,伙计们,我忘了这个

我正在做一个赋值,我必须找到一个大于0的最小正整数,它不在一个包含100000个元素的大数组中。我可以这样做,所以它是正确的,但显然我的解决方案需要的时间太长,并返回超时错误

这是我当前的解决方案:

function solution(A) {
    let min=1

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

    return min
}
有没有一种更快的方法不需要遍历每一个元素

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


编辑2:最小值为-2,最大值为100000,它们不符合顺序

排序数组似乎是一个好的开始。然后你可以从那里循环或二进制搜索,找到最小的正整数。

我相信这是一个测试,看看你是否知道未排序数组的搜索算法。您是否学习过二进制搜索?

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

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

函数GetMinimest(数组){ 设temp=Object.create(null), 最小的; 如果(v>0)temp[v]=true,则为(数组常数v); 最小=+对象键(临时)[0]; 如果(最小!==1)返回1; 而(温度[++最小值]); 返回最小; } log(getminister([2,1,0]);//3.
log(getminister([2,3,0]);//1我为下面的语句编写了代码:“查找不在-2到10000之间的数字数组中的最小正整数”

const arr=[5,4,6,7,5,6,4,5];
常数p=新阵列(10004);
arr.forEach(el=>p[el+2]=1);
让答案=10004;
对于(设i=3;i<10004;++i){
如果(!p[i]){
答案=i-2;
控制台日志(应答);
打破
}否则如果(i==10003){
console.log(“无解决方案”);
}
}


您试图解决的实际问题是什么?您的问题标题和实际问题本身是两个不同的任务。@Terry,他刚刚编辑了问题,这就是原因。值有多大,最大值是多少?您确定给定的数组没有从一开始排序吗?我该如何对其排序?你知道我可以看的教程吗?对数组本身进行排序会很昂贵。@JordanForbes,你认为你可以使用内置函数吗?我的意思是你可以这样做吗?排序通常需要不少于O(N)的时间近似值。只需一次遍历数组并找到最小值就足够了。糟糕的是,我误读了标题,找到了数组中不存在的最小整数。忽略我的评论。是的,但是已经很长时间了。为了使用这个概念,数组需要排序。那么这是否包括将它排序到,比如说,堆中,然后搜索?二进制搜索,将整个数组分成两部分,然后执行一些检查,然后继续选择损坏数组的任何一部分,然后对那个部分也做同样的事情。是的,排序是必须的。哦,你比我快了1分钟,我想,你会发布类似的答案。我用-3作为最小的数字,这是我认为唯一的区别。你真是天才!实际上,这似乎不起作用,因为当我将1添加到数组中时,它返回0,这是不可能的。@JordanForbes,在这种情况下,哪个值是想要的结果?它将是数组中不存在的大于0的最小正整数。因此,如果我在数组中添加1,那么我想要的答案是5,你在逗号后添加的“最小”项是什么?
const arr = [5,4,6,7,5,6,4,5];
const p = new Array(10004);
arr.forEach(el => p[el + 2] = 1);
let answer = 10004;
for (let i = 3; i < 10004; ++i) {
  if (!p[i]) {
    answer = i - 2;
    console.log(answer);
    break;
  } else if (i == 10003) {
    console.log('no solution');
  }
}