javascript - 使用多个指针作为解决方案的averagePair问题
问题描述
我正在尝试解决以下问题:
到目前为止我想出了什么:
function averagePair(arr,tar){
if (arr.length < 2){
return false
}
let x = 0
for (var y = 1; y < arr.length; y++){
if ((arr[x] + arr[y]) / 2 == tar){
return true
}
else {
x++;
}
}
return false
}
我知道这个解决方案不正确,有人可以解释为什么吗?它适用于某些情况,但不是全部
解决方案
您只是在比较相邻元素,例如[0]
vs[1]
和[1]
vs [2]
。你还需要比较[0]
vs[2]
等等。最简单的调整是使用嵌套循环:
for (let x = 0; x < arr.length; x++) {
for (let y = 0; y < arr.length; y++) {
if (x !== y) {
// test arr[x] against arr[y]
但是使用 Set 来跟踪迄今为止发现的内容会更优雅且计算复杂度更低(O(n)
而不是):O(n ^ 2)
const nums = new Set();
for (const num of arr) {
if (nums.has(tar - num)) {
return true;
} else {
nums.add(num);
}
}
function averagePair(arr,tar){
const nums = new Set();
for (const num of arr) {
if (nums.has(tar - num)) {
return true;
} else {
nums.add(num);
}
}
return false;
}
console.log(averagePair([-2, 3, 2], 0));
console.log(averagePair([-2, 3, 3], 0));
推荐阅读
- python - 芹菜中的第二个 AsyncResult 返回 None [Python]
- python - 通过它们在字母表中出现的索引“排列”字符串中的每个字符
- java - For循环java将输出分为2列
- assembly - emu8086 中的“@”符号是什么?
- javascript - 当我想获取数据时出现此错误:TypeError: Cannot read property 'data' of undefined
- c# - 无法将“Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair”类型的对象转换为“Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters”类型的对象
- angular - Angular 10延迟加载路由不起作用
- python - 在 Python 中的 Pandas Dataframe 中按 JSON 对象中的值聚合
- c# - C# 泛型 - 管理每个类型加 1
- c# - 如何为 Visual Studio 测试资源管理器创建适配器?