1. 程式人生 > >leetcode454. 四數相加 II

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)