454. 4Sum II 四数相加

本文知识点: HashTable

推荐阅读前置知识:

代码随想录 (programmercarl.com)

-----------------------------

记得做Leetcode第一题两数相加,点开leetcode评论区:

“有人相爱,有人夜里看海,有人leetcode第一题写不出来。”

现在我是四数之和做不出来。

 其实会做两数之和, 四数之和的难点倒是没什么难点,基本思路是一样的:

1. 使用HashMap储存

Key:        和两数之和一样,是值

Value:       和两数之和不一样的地方: 出现的次数;

为什么要储存出现的次数? 因为题目中需要返回的是 四数相加等于0 的次数。

刚开始做题的时候我陷入了困惑。四个数要怎么办?

请看代码!

​
class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        HashMap<Integer, Integer> table = new HashMap<Integer, Integer>();
        int count = 0;

//其实把他看成两数之和,先把两个数加起来,sum为key, 出现次数为value存成一个Hashtable;
        for(int i : nums1){
            for(int j : nums2){
                if(table.containsKey(i+j)){
                    int num = table.get(i+j);
                    table.put(i+j, num+1);
                }else{
                    table.put(i+j,1);
                }              
            }
        }
//这时候把另外两个数num3, num4相加。 找里面有没有 0 - sum的值
        for(int i : nums3){
            for(int j : nums4){
                if(table.containsKey(0-(i+j))){
//注意因为要返回符合条件的次数,这里需要用到储存的value (排列组合)
                    count += table.get(0-(i+j));
                }     
            }
        }
        return count;
    }
}

​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值