454. 4Sum II

题目

简单来说就是从ABCD中各取出一个数字,使他们的和为0。
454. 4Sum II
简单来说就是要利用好 { } dict的特性。

下面,使用了一个ab dict

简单的二行解法

class Solution:
    def fourSumCount(self, A, B, C, D):
        AB = collections.Counter(a+b for a in A for b in B)
        return sum(AB[-c-d] for c in C for d in D)

使用更多的dict提高了效率。

高效解法

class Solution:
    def fourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int]) -> int:
        
        A_dict = {}
        for i in A:
            if i in A_dict:
                A_dict[i] += 1
            else:
                A_dict[i] = 1
                
        B_dict = {}
        for i in B:
            if i in B_dict:
                B_dict[i] += 1
            else:
                B_dict[i] = 1
                
        C_dict = {}
        for i in C:
            if i in C_dict:
                C_dict[i] += 1
            else:
                C_dict[i] = 1
                
        D_dict = {}
        for i in D:
            if i in D_dict:
                D_dict[i] += 1
            else:
                D_dict[i] = 1
                
        AB = {}
        for i in A_dict:
            for j in B_dict:
                if i+j in AB:
                    AB[i+j] += A_dict[i] * B_dict[j]
                else:
                    AB[i+j] = A_dict[i] * B_dict[j]     
        count = 0
        
        for i in C_dict:
            for j in D_dict:
                if -i-j in AB:
                    count += C_dict[i] * D_dict[j] * AB[-i-j]
                    
        return count