首页 > 技术文章 > leetcode之 454.四数相加 II js

ymdi 2020-11-27 12:25 原文

题目如图

在这里插入图片描述

思路

  1. 随机取两个数组,计算其内部任意数字的求和sum,并已和为键,出现次数为值,存储在一个对象中,如sum为1,sum出现次数为2,则 sumList = {1: 2}
  2. 计算另外两个数组内部任意数字之和temp,并与 1 中的sum做对比,如果二者之和为 0(sum = -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
...

推荐阅读