Count Good Meals in Python


A good meal contains exactly two different food items with a sum of deliciousness equal to a power of two. You can pick any two different foods to make a good meal.

Let us suppose we have given an array of integers arr where arr[i] is the deliciousness of the ith item of food, return the number of different good meals you can make from this list.

For example,

Input-1

arr[ ] = {1, 3, 5, 7, 9}

Output

4

Explanation − The good meals are (1,3), (1,7), (3,5) and, (7,9). Their respective sums are 4, 8, 8, and 16, all of which are powers of 2.

Input-2

arr[ ]= {1,1,1,3,3,3,7}

Output

15

Explanation − The good meals are (1,1) in 3 ways, (1,3) in 9 ways, and (1,7) in 3 ways.

The approach used to solve this problem

  • Take input as an array of positive integers.

  • A function count pairs take all the array elements as a list of integers.

  • Sort the input array element in increasing order.

  • For every element of the array, find the maximum sum such that every element is in the power of ‘2’.

Example

class Solution:
   def countpairs(self, arr: List[int]) -> int:
      """
         elem1 + elem2 == 1 << i
         elem1 = 2 << i - elem2
      """
      result = 0
      seen = defaultdict(int)
      arr.sort()
      for d in arr:
         n = 1
         while n <= d + d:
            ans = (ans + seen[n-d]) % (10 ** 9 + 7)
            n = n << 1
         seen[d] += 1
      return ans
sol1= Solution()
print(sol1.countpairs([1,1,1,3,3,3,7]))

Output

4

Updated on: 05-Feb-2021

234 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements