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

LeetCode[454]四数相加Ⅱ

思路

如果我们暴力求解一定是n的四次方,那我们暴力肯定是过不去的,我们能简化四次方吗?

可以,我第一次尝试把四次方简化成二次方,但是我们一共四个数组,怎么简化成二次方,那我们就把四个数组看成两个数组,这样我们就可以使用二次方进行求解了,每两个数组进行一次n方。这道题也是一道哈希题,我们面对哈希题就可以使用数组,set和map,因为我们需要统计有几个原组和前两个数组的和,所以我们使用map来搞。

前两个数组使用n方进行和的相加存入map,如果存在相同值,我们value就++

后两个数组使用n方进行和的相加,如果我们想结果=0,那么前两个数组和后两个数组的和一定是相反数,如果相加=0了,那么我们就将一开始存的value相加到结果中就行了。

因为这个value代表了前两个数组一共有多少种结果。

代码:

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

 


http://www.kler.cn/a/595319.html

相关文章:

  • 分布式唯一ID
  • LDAP从入门到实战:环境部署与配置指南(下)
  • 希尔排序中的Hibbard序列
  • 如何在MCU工程中启用HardFault硬错误中断
  • FPGA中串行执行方式之状态机
  • 蓝桥杯 之 数论
  • Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)
  • Windows10配置OpenJDK11
  • 基于深度学习的目标追踪技术全解析
  • 验证码背后:前端安全问题的深度剖析
  • 前端网络请求
  • 【强化学习】Reward Model(奖励模型)详细介绍
  • 智能工厂能耗分析:Python驱动的高效能源管理
  • 「0基础学爬虫」爬虫基础之抓包工具的使用
  • SQLite 查询数据库属性
  • AI视频是否会影响原创价值
  • 人工智能:企业RAG方案
  • 浅谈跨平台框架的演变(H5混合开发->RN->Flutter)
  • 【C++11】左值引用、右值引用、移动语义和完美转发
  • 编程语言选择分析:C#、Rust、Go 与 TypeScript 编译器优化