4Sum II in Python


Suppose we have four lists A, B, C, D of integer values, we have to compute how many tuples (i, j, k, l) there are such that A[i] + B[j] + C[k] + D[l] is zero. Consider all A, B, C, D have same length of N where 0 ≤ N ≤ 500. Remember all integers are in the range of -228 to 228 - 1 and the result is guaranteed to be at most 231 - 1. So if the inputs are A = [1, 2], B = [-2, -1], C = [-1, 2], D = [0, 2], then the output will be 2. This is because there are two tuples, they are (0, 0, 0, 1) so A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0, and another tuple is (1, 1, 0, 0), A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0

To solve this, we will follow these steps −

  • make one map called sums
  • for each element i in A
    • for each element j in B
      • if i + j is not in the sums map, then set sums[i + j] := 1
      • otherwise increase the value of sums[i + j]
  • counter := 0
  • for each element i in C
    • for each element j in D
      • if (-1)*(i + j) in sums, then counter := counter + sums[-1 * (i + j)]
  • return counter

Example

Let us see the following implementation to get better understanding −

 Live Demo

class Solution(object):
   def fourSumCount(self, A, B, C, D):
      sums ={}
      for i in A:
         for j in B:
            if i+j not in sums:
               sums[i+j] = 1
            else:
               sums[i+j] +=1
      counter = 0
      for i in C:
         for j in D:
            if -1 * (i+j) in sums:
               #print(-1 * (i+j))
               counter+=sums[-1*(i+j)]
      return counter
ob1 = Solution()
print(ob1.fourSumCount([1,2], [-2,-1], [-1,2], [0,2]))

Input

[1,2]
[-2,-1]
[-1,2]
[0,2]

Output

2

Updated on: 28-Apr-2020

597 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements