454. 4Sum II
Given four integer arrays nums1, nums2, nums3, and nums4 all of length n, return the number of tuples (i, j, k, l) such that:
0 <= i, j, k, l < nnums1[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
Post a Comment