454. 4Sum II

Given four integer arrays nums1nums2nums3, and nums4 all of length n, return the number of tuples (i, j, k, l) such that:

  • 0 <= i, j, k, l < n
  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

def fourSumCount(nums1, nums2, nums3, nums4):
    
     m = collections.defaultdict(int)
       
    lists = [nums1, nums2, nums3, nums4]
    h = len(lists) // 2
   
    def nSumCount():
        buildHashOfFirstHalf(0, 0)
        return countComplementsInSecondHalf(h, 0)
       
    def buildHashOfFirstHalf(list_id, cur_sum):
        if list_id == h:
            m[cur_sum] = m[cur_sum]+1
        else:
            for a in lists[list_id]:
                buildHashOfFirstHalf(list_id + 1, cur_sum + a)
               
    def countComplementsInSecondHalf(list_id, complement):
        if list_id == L:
            return m[complement]
        count = 0
        for a in lists[list_id]:
            count += countComplementsInSecondHalf(list_id + 1, complement - a)
        return count
   
    return nSumCount()

Comments

Popular posts from this blog

347. Top K Frequent Elements

849. Maximize Distance to Closest Person

674. Longest Continuous Increasing Subsequence