leetcode之 454.四数相加 II js

题目如图

在这里插入图片描述

思路

  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
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值