首页 > 其他分享 >力扣454 四数相加

力扣454 四数相加

时间:2022-11-26 22:46:00浏览次数:52  
标签:map 四数 int 454 力扣 nums4 nums1 nums2 nums3

题目:

给四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

示例:

输入: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

思路:

1.首先定义 一个map,key放a和b两数之和,value 放a和b两数之和出现的次数。

2.遍历A和B数组,统计两个数组元素之和,和出现的次数,放到map中。

3.遍历C和D数组,找到如果 0-(c+d) 在map中出现过的话,就用sum把map中key对应的value也就是出现次数统计出来。

5.最后返回统计值 sum就可以了。

class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        int sum=0,temp=0;//sum为满足要求的元组个数,temp记录0-(C+D)
        int sum1=0,sum2=0;//A+B,C+D
        Map<Integer, Integer> map = new HashMap<>();
        int n=nums1.length;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                sum1=nums1[i]+nums2[j];//A+B
                if(map.containsKey(sum1)){//如果A+B之前出现过,那么记录多一次
                    map.put(sum1,map.get(sum1)+1);
                }else{
                    map.put(sum1,1);//没出现过,就是第一次
                }
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                sum2=nums3[i]+nums4[j];
                temp=0-sum2;//0-(C+D)
                if(map.containsKey(temp)){//如果map中出现过能满足temp的A+B组合
                    sum+=map.get(temp);//sum加A+B所有组合可能的次数
                }
            }
        }
        return sum;
    }
}

 

标签:map,四数,int,454,力扣,nums4,nums1,nums2,nums3
From: https://www.cnblogs.com/cjhtxdy/p/16928460.html

相关文章

  • 力扣 leetcode 882. 细分图中的可到达节点
    问题描述给你一个无向图(原始图),图中有n个节点,编号从0到n-1。你决定将图中的每条边细分为一条节点链,每条边之间的新节点数各不相同。图用由边组成的二维数组edg......
  • 力扣1 两数之和
    题目:给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个......
  • 力扣153(java&python)-寻找旋转排序数组中的最小值(中等)
    题目:已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,......
  • 力扣 leetcode 795. 区间子数组个数
    问题描述给你一个整数数组nums和两个整数:left及right。找出nums中连续、非空且其中最大元素在范围[left,right]内的子数组,并返回满足条件的子数组的个数。生成......
  • 力扣202 快乐数
    题目:编写一个算法来判断一个数n是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这......
  • 力扣349 两个数组的交集
    题目:给定两个数组 nums1 和 nums2,返回它们的交集 。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。示例:输入:nums1=[1,2,2,1],nums......
  • 力扣81(java&python)-搜索旋转排序数组 II(中等)
    题目:已知存在一个按非降序排列的整数数组nums,数组中的值不必互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[......
  • 力扣 leetcode 3. 无重复字符的最长子串
    题目描述给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。提示:0<=s.length<=5*104s由英文字母、数字、符号和空格组成示例示例1:输入:s=......
  • 力扣242 有效的字母异位词
    题目:给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若 s和t 中每个字符出现的次数都相同,则称 s和t 互为字母异位词。示例:输入:......
  • 有没有人一起从零开始刷力扣
    简介是不是有许多小伙伴在刷力扣的时候感觉无从下手?从头按顺序开始刷的童鞋们可能会比较有感触,为什么才第四题就感觉很难了?没关系,本文将对力扣的1-700题中不需要会员的......