首页 > 其他分享 >454_四数相加Ii

454_四数相加Ii

时间:2024-10-12 16:32:19浏览次数:6  
标签:map 四数 int 454 Ii nums4 nums1 nums2 nums3

454_四数相加Ii

【问题描述】

给你四个整数数组 nums1nums2nums3nums4 ,数组长度都是 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
    
    示例二:
    输入: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

【算法设计思想】

【算法描述】

C++:

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        unordered_map<int, int> map; // 哈希表,用于存储 nums1 和 nums2 中所有可能的和及其出现次数
        
        // 遍历 nums1 和 nums2,计算每一对元素的和,并将和及其出现次数存入哈希表
        for (auto& elem1 : nums1) {
            for (auto& elem2 : nums2) {
                map[elem1 + elem2]++;
            }
        }

        int count = 0; // 用于统计满足条件的四元组数量
        
        // 遍历 nums3 和 nums4,计算每一对元素的和,并检查 -(c + d) 是否在哈希表中
        for (auto& elem3 : nums3) {
            for (auto& elem4 : nums4) {
                // 计算 -(c + d)
                int target = 0 - elem3 - elem4;
                // 检查 target 是否在哈希表中
                if (map.find(target) != map.end()) {
                    // 如果存在,将对应的出现次数加到 count 上
                    count += map[target];
                }
            }
        }
        
        return count; // 返回满足条件的四元组数量
    }
};

Java:

class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        // 使用 HashMap 存储 nums1 和 nums2 中所有可能的两两元素之和及其出现次数
        HashMap<Integer, Integer> map = new HashMap<>();
        
        // 初始化计数器,用于记录满足条件的四元组数量
        int count = 0;
        
        // 遍历 nums1 和 nums2,计算每一对元素的和,并记录在 HashMap 中
        for (int i = 0; i < nums1.length; i++) {
            for (int j = 0; j < nums2.length; j++) {
                int sum = nums1[i] + nums2[j];
                // 使用 getOrDefault 方法确保键不存在时初始化为0
                map.put(sum, map.getOrDefault(sum, 0) + 1);
            }
        }

        // 遍历 nums3 和 nums4,寻找与之前存储的和相加等于0的情况
        for (int i = 0; i < nums3.length; i++) {
            for (int j = 0; j < nums4.length; j++) {
                int target = 0 - nums3[i] - nums4[j];
                // 如果这个相反数存在于 HashMap 中,则说明找到了一组解
                if (map.containsKey(target)) {
                    // 增加计数器,值为 HashMap 中该和出现的次数
                    count += map.get(target);
                }
            }
        }
        
        // 返回满足条件的四元组数量
        return count;
    }
}

Python:

class Solution:
    def fourSumCount(
        self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]
    ) -> int:
        # 使用字典来存储 nums1 和 nums2 中所有可能的两两元素之和及其出现次数
        dic = {}
        
        # 遍历 nums1 和 nums2,计算每一对元素的和,并记录在字典中
        for elem1 in nums1:
            for elem2 in nums2:
                # 使用 get 方法确保键不存在时初始化为0
                dic[elem1 + elem2] = dic.get(elem1 + elem2, 0) + 1
        
        # 初始化计数器,用于记录满足条件的四元组数量
        count = 0
        
        # 遍历 nums3 和 nums4,寻找与之前存储的和相加等于0的情况
        for elem3 in nums3:
            for elem4 in nums4:
                # 计算需要找到的相反数
                target = 0 - elem3 - elem4
                
                # 如果这个相反数存在于字典中,则说明找到了一组解
                if target in dic:
                    # 增加计数器,值为字典中该和出现的次数
                    count += dic[target]
        
        # 返回满足条件的四元组数量
        return count

标签:map,四数,int,454,Ii,nums4,nums1,nums2,nums3
From: https://www.cnblogs.com/zeta186012/p/18460825

相关文章

  • 代码随想录训练营第五天|Leetcode.349,Leetcode.454,Leetcode19,Leetcode18
    一、哈希表和set和map和数组的关系 用哈希表,判断是否出现过。数值很大或者数值很分散时,不用数组,占用空间大,用set。set,multiset数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判......
  • Windows Server 2008R2服务器 IIS7.0 安装SSL证书并绑定https
    本例以阿里云服务器来解说,本服务器为WinodwsServer2008R2(一般现在至少是2012版本了)默认IIS为7.0第一步:在阿里云上申请好证书并下载IIS版本,下载后上传到服务器中,如下图:第二步:导入证书在服务器按Win+R键,打开运行。输入mmc,单击确定,打开Windows服务器控制台(MMC,MicrosoftMa......
  • iis网站数据库无法连接数据库
    IIS网站无法连接数据库的问题可能由多种原因导致,以下是一些常见的排查步骤和解决方法:检查数据库连接字符串:确认数据库服务器地址、端口、用户名和密码是否正确。检查是否有防火墙或安全组规则阻止了访问。确认数据库服务状态:确保数据库服务(如MySQL,SQLServer等)正在......
  • 毕设项目案例实战II基于Java+Spring Boot+MySQL的学生选课系统的设计与实现(源码+数据
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着信息技术的飞速发展和教育信息化的不......
  • 毕设项目案例实战II基于SSM的健身房预约系统设计与实现(源码+数据库+文档)
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着健康意识的日益增强,健身房已成为现代......
  • 代码随想录算法训练营 | 完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ,70. 爬楼梯 (进阶)
    完全背包题目链接:完全背包文档讲解︰代码随想录(programmercarl.com)视频讲解︰完全背包日期:2024-10-11想法:dp数组设置思路跟01背包一样,不同在遍历上,完全背包遍历背包大小是从weight[i]开始的(背包空间小于weight[i]就没有意义,不用考虑,直接用之前的对应数值就行了),从前往后遍历就能......
  • 3164. 优质数对的总数 II
    给你两个整数数组nums1和nums2,长度分别为n和m。同时给你一个正整数k。如果nums1[i]可以被nums2[j]*k整除,则称数对(i,j)为优质数对(0<=i<=n-1,0<=j<=m-1)。返回优质数对的总数。示例1:输入:nums1=[1,3,4],nums2=[1,3,4],k=1输出:5解释:5......
  • 网站iis怎么修改网站内容
    在IIS(InternetInformationServices)中修改网站内容通常涉及以下几个步骤:访问IIS管理器:打开“服务器管理器”。点击“工具”>“InternetInformationServices(IIS)管理器”。定位网站:在“IIS管理器”窗口左侧的连接窗格中,展开服务器名称,然后找到并点击你想要修......
  • 代码随想录算法训练营 | 1049. 最后一块石头的重量 II,494. 目标和,474.一和零
    1049.最后一块石头的重量II题目链接:1049.最后一块石头的重量II文档讲解︰代码随想录(programmercarl.com)视频讲解︰最后一块石头的重量II日期:2024-10-10想法:这这么会是分割等和子集一类的问题。。。Java代码如下:classSolution{publicintlastStoneWeightII(int[]......
  • LaTeX 教學系列 (III):基本設定
    LaTeX教學系列(II):第一份LaTeX文件裡面,我們提到了如何建立第一份文件,並且根據不同的文件類別使用章節標題。文章目錄TeX世界的巴別塔LaTeX的裝備:套件買裝備:安裝與使用套件說明書:CTANLaTeX百變怪:設定文字設定字體大小設定字體系列設定字型設定中文LaTeX的服裝:......