题目如图
思路
- 随机取两个数组,计算其内部任意数字的求和
sum
,并已和为键,出现次数为值,存储在一个对象中,如sum
为1,sum
出现次数为2,则sumList = {1: 2}
- 计算另外两个数组内部任意数字之和
temp
,并与 1 中的sum
做对比,如果二者之和为 0(sun
=-temp
),则可记为出现一个元组。
代码
function sumCompute(a, b, c, d) {
const l = a.length
if (!l) { return 0 }
const sumRes = {}
let r = 0
let i = 0
let x = 0
while (i < l) {
for (let j of b) {
const temp = a[i] + j
if (temp in sumRes) { sumRes[temp] += 1 } else { sumRes[temp] = 1 }
}
i++
}
// console.log(sumRes)
while (x < l) {
for (let y of d) {
// temp取相反数,如果此时的temp存在于sumRes中,则`sun` = `-temp`
const temp = -(c[x] + y)
if (temp in sumRes) { r += sumRes[temp] }
}
x++
}
// console.log(sumRes)
// console.log(r)
return r
}
const res = sumCompute(A, B, C, D) //2
为了避免错误,可以多验证几次
const res = sumCompute(A, C, B, D) //2
const res = sumCompute(A, C, D, B) //2
...