首页 > 其他分享 >LeetCode454. 四数相加 II

LeetCode454. 四数相加 II

时间:2023-03-17 19:13:24浏览次数:35  
标签:map 四数 int II LeetCode454 nums4 nums1 nums2 nums3

题目描述:

给你四个整数数组 nums1nums2nums3 和 nums4 ,数组长度都是 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就可以,不用考虑有重复的四个元素相加等于0的情况

本题解题步骤:

  1. 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。
  2. 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
  3. 定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
  4. 在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
  5. 最后返回统计值 count 就可以了

 

class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        Map<Integer, Integer> map = new HashMap<>();
        int temp;
        int res = 0;
        //统计两个数组中的元素之和,同时统计出现的次数,放入map
        for (int i : nums1) {
            for (int j : nums2) {
                temp = i + j;
                if (map.containsKey(temp)) {
                    map.put(temp, map.get(temp) + 1);
                } else {
                    map.put(temp, 1);
                }
            }
        }
        //统计剩余的两个元素的和,在map中找是否存在相加为0的情况,同时记录次数
        for (int i : nums3) {
            for (int j : nums4) {
                temp = i + j;
                if (map.containsKey(0 - temp)) {
                    res += map.get(0 - temp);
                }
            }
        }
        return res;
    }
}

 

标签:map,四数,int,II,LeetCode454,nums4,nums1,nums2,nums3
From: https://www.cnblogs.com/zhz123567/p/17227880.html

相关文章

  • 代码随想录Day2-Leetcode977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
    977.有序数组的平方题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/最初想法是用二分找到恰好大于0的数;然后数组切片,负的一方反转,然后按照合并......
  • LeetCode 18. 四数之和
    classSolution{public:vector<vector<int>>fourSum(vector<int>&nums,inttarget){vector<vector<int>>ans;longlongtmp=target;......
  • 剑指 Offer II 010. 和为 k 的子数组
    剑指OfferII010.和为k的子数组给定一个整数数组和一个整数k,请找到该数组中和为k的连续子数组的个数。示例1:输入:nums=[1,1,1],k=2输出:2解释:此题......
  • Pycharm报错 : SyntaxError: Non-ASCII character ' but no encoding declared;
     File"D:/03��ѧ/2023�괺��Python/0310/����ѧ�ź������Ƚ�v3--��Ѷ���鿼��ר��--12��.py",line1SyntaxError:Non-ASCIIcharacter'\xe6'infileD:/03��ѧ/2023�괺��Python/0310/����ѧ�ź������Ƚ�v3--��Ѷ���鿼��ר......
  • swagger的API显示问题和IIS服务器配置
    SwaggerUI 这个页面,只在VisualStudio调试时显示。放到IIS上是不显示的。在IIS上的应用池,设置为“无托管”,并且安装ASP.NETCoreIIS模块:dotnet-hosting-6.0.14-win......
  • 剑指 Offer 58 - II. 左旋转字符串
    题目剑指Offer58-II.左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"......
  • 407. 接雨水 II (Hard)
    问题描述407.接雨水II(Hard)给你一个mxn的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。示例1:输入:heigh......
  • 剑指 Offer 58 - II. 左旋转字符串
    字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位......
  • 剑指 Offer 68 - II. 二叉树的最近公共祖先(java解题)
    (剑指Offer68-II.二叉树的最近公共祖先(java解题))1.题目给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T......
  • .netCore Swagger 发布到IIS 问题
    1.安装DotNetCore.2.0.8-WindowsHosting  2.https://dotnet.microsoft.com/en-us/download/dotnet/6.0  安装aspnetcore-runtime-6.0.11-win-x643.IIS应用池安装......