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)

你可能感兴趣的:(leetcode454. 四数相加 II)