如何解决如何有效检查整数是否不在Javascript的大规模数组中
我正在做一个作业,我必须找到大于0的最小正整数,该整数不在包含100,000个元素的巨大数组中。我能够做到这一点是正确的,但是显然我的解决方案花费的时间太长,并返回超时错误。
这是我当前的解决方案:
function solution(A) {
let min=1
while(A.includes(min) === true){
min++
}
return min
}
有没有一种更快的方式来实现此目的,而又不涉及遍历每个元素?
编辑:伙计们,我忘记了这个问题的关键要素!
edit 2:最小值为-2,最大值为100,000,并且顺序不正确
解决方法
您可以获取一个对象,并将每个想要的值添加到该对象。
然后取最小的键并检查是否等于1,然后递增直到找不到键。否则返回一个。
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
,
我确实相信这是一项测试,以了解您是否知道未排序数组的搜索算法。您了解过二进制搜索吗?
,我为下面的语句编写了代码:“查找最小正整数,而不是从-2到10000之间的任何数字的数组。”
const arr = [5,4,6,7,5,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');
}
}
,
对数组进行排序似乎是一个不错的起点。然后,您可以从那里循环或二进制搜索以找到最小的正整数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。