四数相加2-哈希表

本文介绍了一种解决力扣上的两数相加问题的算法,通过建立哈希表记录数组A和B中元素之和的出现次数,然后遍历数组C和D,查找与C+D之和相反数在哈希表中的出现次数,累加计数,最终返回计数值。这种方法避免了重复元素的四数之和情况。

两数相加2-力扣

思路

  • 4个独立数组,A[i] + B[j] + C[k] + D[l] = 0,不用考虑有重复的4个元素相加等于0的情况
  • python中,if i in dict,这里dict等价于dict.keys(),表示元素是否出现在字典的keys中
    -解题步骤:
  1. 用dict做哈希表,key为a+b,value为a+b出现次数
  2. 用count统计次数,遍历数组C和D,若0-(c+d)出现在hash_map中,取出dict中对应的value,加给count
  3. 返回count
class Solution:
    def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
        #用dic来做hash表,a+b作为key,a+b出现次数作为value
        hash_map=dict()        
        for a in nums1:
            for b in nums2:
                if (a+b) in hash_map:
                    hash_map[a+b]+=1
                else:
                    hash_map[a+b]=1
        
        #遍历C和D,若0-(c+d)出现在hash_map中,把对应的value取出,覆盖计数变量count
        count=0
        for c in nums3:
            for d in nums4:
                tmp=0-(c+d)
                if tmp in hash_map:
                    count+=hash_map[tmp]

        return count
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值