leetcode454. 四数相加 II

class Solution:
    def fourSumCount(self, A, B, C, D):
        """
        :type A: List[int]
        :type B: List[int]
        :type C: List[int]
        :type D: List[int]
        :rtype: int
        """
        # 如果暴力做法就会是O(n^4) 且 0 ≤ N ≤ 500
        # 那么62500000000 这个数量级肯定是不行的

        # 因为我们要计数, 所以要用map 或者说是dict
        # 要注意的是, 没有进行特殊情况的判断
        d = {}
        for item1 in C:
            for item2 in D:
                d[item1 + item2] =d.get(item1 + item2, 0) + 1
        res = 0
        # 时间复杂度 O(n^2)
        # 空间复杂度 O(n^2)  因为a中每一个值 都要与b中的每一个值进行相加,
        # 一般情况下, 他们的数值是不相等的
        for item3 in A:
            for item4 in B:
                tmp = -item3 - item4
                res += d.get(tmp, 0)
        return res

if __name__ == '__main__':
    A = [1, 2]
    B = [-2, -1]
    C = [-1, 2]
    D = [0, 2]
    sol = Solution()
    res = sol.fourSumCount(A, B, C, D)
    print(res)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值