「LeetCode」454-四数相加||⚡️

简介: 「LeetCode」454-四数相加||⚡️

image.png

前言🌧️



算法,对前端人来说陌生又熟悉,很多时候我们都不会像后端工程师一样重视这项能力。但事实上,算法对每一个程序员来说,都有着不可撼动的地位。


因为开发的过程就是把实际问题转换成计算机可识别的指令,也就是《数据结构》里说的,「设计出数据结构,在施加以算法就行了」。


当然,学习也是有侧重点的,作为前端我们不需要像后端开发一样对算法全盘掌握,有些比较偏、不实用的类型和解法,只要稍做了解即可。


题目🦀


454. 四数相加 II


难度


给你四个整数数组 nums1nums2nums3nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:


  • 0 <= i, j, k, l < n
  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0


示例 1:


输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
输出:2
解释:
两个元组如下:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0


示例 2:


输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]
输出:1


提示:

  • n == nums1.length
  • n == nums2.length
  • n == nums3.length
  • n == nums4.length
  • 1 <= n <= 200
  • -228 <= nums1[i], nums2[i], nums3[i], nums4[i] <= 228


解题思路🌵



  • 这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以
  • 首先定义 一个map,key放a和b两数之和,value 放a和b两数之和出现的次数。
  • 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
  • 定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
  • 在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
  • 最后返回统计值 count 就可以了


源码🔥



/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @param {number[]} nums3
 * @param {number[]} nums4
 * @return {number}
 */
var fourSumCount = function(nums1, nums2, nums3, nums4) {
    const twoSumMap = new Map();
    let count =0
  for(let num1 of nums1){
      for(let num2 of nums2){
          const sum = num1+num2
          twoSumMap.set(sum,(twoSumMap.get(sum)||0)+1)
      }
  }
  for(const num3 of nums3){
      for(const num4 of nums4 ){
          const sum =num3+num4;
          //如果twoSumMap有对应的值,表示有几种组合
          count +=(twoSumMap.get(0-sum)||0)
      }
  }
  return count
};

结束语🌞


image.png

那么鱼鱼的LeetCode算法篇的「LeetCode」454-四数相加||⚡️就结束了,算法这个东西没有捷径,只能多写多练,多总结,文章的目的其实很简单,就是督促自己去完成算法练习并总结和输出,菜不菜不重要,但是热爱🔥,喜欢大家能够喜欢我的短文,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾,欢迎加我好友,一起沙雕,一起进步


相关文章
|
18天前
LeetCode###445. 两数相加 II
LeetCode###445. 两数相加 II
15 2
|
2月前
|
存储 算法 Go
LeetCode第二题: 两数相加
 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
LeetCode第二题: 两数相加
|
2月前
|
人工智能 Java C++
leetcode-454:四数相加 II
leetcode-454:四数相加 II
24 1
|
2月前
leetcode-258:各位相加
leetcode-258:各位相加
24 0
|
2月前
|
存储
leetcode-2:两数相加
leetcode-2:两数相加
25 0
|
10月前
454. 四数相加 II
454. 四数相加 II
35 0
|
10月前
|
存储 算法
LeetCode2-两数相加
LeetCode2-两数相加
|
11月前
|
存储
LeetCode-2043 两数相加题解
LeetCode-2043 两数相加题解
|
存储
LeetCode 2. 两数相加
LeetCode 2. 两数相加
57 0