Back to all solutions

#1711 - Count Good Meals

Problem Description

A good meal is a meal that 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.

Given an array of integers deliciousness where deliciousness[i] is the deliciousness of the ith item of food, return the number of different good meals you can make from this list modulo 109 + 7.

Note that items with different indices are considered different even if they have the same deliciousness value.

Solution

/**
 * @param {number[]} deliciousness
 * @return {number}
 */
var countPairs = function(deliciousness) {
  const MOD = 1e9 + 7;
  const frequency = new Map();
  let result = 0;

  for (const value of deliciousness) {
    for (let power = 1; power <= 1 << 21; power <<= 1) {
      const complement = power - value;
      if (frequency.has(complement)) {
        result = (result + frequency.get(complement)) % MOD;
      }
    }
    frequency.set(value, (frequency.get(value) || 0) + 1);
  }

  return result;
};