javascript - 我如何有效地检查整数是否不在Javascript中的大量数组中
问题描述
我正在做一个任务,我必须找到大于 0 的最小正整数,它不在包含 100,000 个元素的巨大数组中。我能够做到,所以它是正确的,但显然我的解决方案花费的时间太长并返回超时错误。
这是我目前的解决方案:
function solution(A) {
let min=1
while(A.includes(min) === true){
min++
}
return min
}
有没有更快的方法不涉及循环遍历每个元素?
编辑:哎呀,伙计们,我忘记了这个问题的关键要素!
编辑 2:最小值为 -2,最大值为 100,000,它们不按顺序排列
解决方案
您可以获取一个对象并将每个想要的值添加到该对象。
然后取最小的键并检查是否等于一并递增直到找不到键。否则返回一个。
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
推荐阅读
- java - T 类型的Java泛型集合,添加会引发编译错误,但检索和添加不会
- android - 如何在 Android 上使用 Kotlin 获取 Dagger 2 模块中的组件依赖项?
- symfony - 序列化和编码有什么区别?
- r - 如何使用 apply.daily/period.apply 计算 XTS 时间序列中每列的最大值?
- freemarker - Geoserver freemarker 模板语言检查文件链接
- django - Django:创建多项选择字段的最佳方法
- javascript - 最接近 ES6 的转换 jQuery 为 bg 添加 CSS
- javascript - 用 vanilla javascript 重新组织 json 数据
- unit-testing - 如何在 GOLANG 中获取多个文件的覆盖率
- unity3d - Unity2D:在拖动预制件时播放实例化预制件的动画