javascript - JS for循环在for循环中,我猜范围有问题
问题描述
输入是一个数组 ints [11, 2, 7, 8, 4, 6] 和整数 s 10。功能是输出一个数组,其中包含一对来自 int 的两个数字,它们首先形成 10 的和。所以在这里输出应该是[2, 8],因为2 + 8 = 10。为什么输出空数组?arrResults 是在嵌套的 for 循环中更新的,那么为什么它在最后的 return 语句之后没有显示出来呢?
function sumPairs(ints, s) {
let arrResults = [];
let sumOfTwo;
for (i = 0; i < ints.length; i++) {
for (j = 0; j < ints.length; j++) {
sumOfTwo = ints[i] + ints[j];
if (sumOfTwo === s) {
arrResults.push(ints[i]);
arrResults.push(ints[j]);
break;
}
}
if (arrResults !== []) {
break;
}
}
return arrResults;
}
console.log(sumPairs([11, 2, 7, 8, 4, 6], 10));
解决方案
除了一个数组与另一个数组的错误比较(没有相同的对象引用)
a = []
b = []
a === b // false
// other example
a = []
b = a
a === b // true
检查长度,
a = []
a.length // 0
并使用 n² 的近似二次时间复杂度,即使使用循环
i = 0; i < array.length - 1
j = i + 1; j < array.length
大于 n² 的一半,但仍然是二次方的,
您可以使用一个已看到值的对象进行单个循环。
这种方法会找到数组的第一对和某个总和。
function sumPairs(ints, s) {
const needed = {};
for (const value of ints) {
if (needed[value]) return [s - value, value];
needed[s - value] = true;
}
}
console.log(sumPairs([11, 2, 7, 8, 4, 6], 10));
推荐阅读
- selenium - Selenium + Chrome Webdrivers 杀死内存
- python - 无法从一些类似盒子的容器中获取标题
- android-gradle-plugin - 用户无法使用 gradlew 登录。与其他用户相同的权限
- jenkins - 如何通过 Jenkins 替换文件中的令牌?
- html - 如何内联此进度条以用于 gmail?
- android - Android Studio 中 Ubuntu 18.04 上的 kotlin-compiler-embeddable.jar 错误
- html - 火狐鬼影飞入
- java - JVM 是否在运行时在 java 中创建原始类型的对象?
- aggregation-framework - Mongodb聚合查询到java代码
- swift - 显示来自 Firebase 的用户信息