当前位置: 首页 > article >正文

【LeeCode】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就可以,不用考虑有重复的四个元素相加等于0的情况,所以相对于题目18. 四数之和,题目15.三数之和,还是简单了不少!

本题解题步骤:

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

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

  3. 定义int变量res,用来统计 a+b+c+d = 0 出现的次数。

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

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

解:

class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        int res = 0;
        Map<Integer, Integer> map = new HashMap<Integer, Integer> ();
        for (int i : nums1) {
            for (int j : nums2) {
                map.put(i + j, map.getOrDefault(i + j, 0) + 1);
            }
        }
        for (int i : nums3) {
            for (int j : nums4) {
                res += map.getOrDefault(0 - (i + j), 0);
            }
        }
        return res;
    }
}

http://www.kler.cn/news/161524.html

相关文章:

  • dbug_hub 错误 使用多个ILA导致
  • STM32 定时器配置步骤
  • Java多线程编程深入解析——Java程序员,你掌握了多线程吗?【文末送书-03】
  • C语言指针——野指针
  • Python中如何判断List中是否包含某个元素
  • cocos creator “TypeError: Cannot set property ‘string‘ of null
  • 【原神游戏开发日志1】缘起
  • 低代码你需要了解一下
  • 【Android】查看keystore的公钥和私钥
  • API接口使用方法(封装好的电商平台)
  • 添加新公司代码的配置步骤-Part4
  • 水平自动扩容和缩容HPA;API资源对象NetworkPolicy;Kubernetes用户安全控制;Kubernetes创建普通用户示例
  • Windows 基于 VMware 虚拟机安装银河麒麟高级服务器操作系统
  • 第3节:Vue3 v-bind指令
  • 华为OD机试 - 攀登者1(Java JS Python C)
  • 030 - STM32学习笔记 - ADC(四) 独立模式多通道DMA采集
  • 电力智慧运维系统
  • 挑选数据可视化工具:图表类型、交互功能与数据安全
  • 2023年12月7日:QT实现登陆界面
  • 【LeetCode热题100】【双指针】三数之和
  • java中synchronized和Lock的区别是什么?
  • 免费文章生成器的种类,3款免费的文章生成器推荐
  • 计算机网络的分类
  • 跨境电商独立站怎么获取流量 跨境电商引流的两个方法
  • 实例分割 Mask-RCNN
  • docker数据卷
  • 熟悉ElasticSearch 集群中搜索数据的过程吗?
  • Pytorch在二进制层面比较张量中的各行是否相同,并返回不相同的各行
  • 【面试常考150题】1、88合并两个有序数组
  • MySQL核心知识点整理大全1-笔记