用 Python 计算美食
一顿美餐恰好包含两种不同的食物,其美味之和等于2的幂。你可以选择任何两种不同的食物来做一顿美餐。
让我们假设我们已经给出了一个整数数组arr,其中arr[i]是第i项食物的美味程度,返回您可以从这个列表中制作的不同美食的数量。
例如,
输入1-
arr[ ] = {1, 3, 5, 7, 9}
输出-
4
说明-好饭是(1,3)、(1,7)、(3,5)和(7,9)。它们各自的和是4、8、8和16,都是2的幂。
输入2-
arr[ ]= {1,1,1,3,3,3,7}
输出-
15
说明-好饭是(1,1)3种方式,(1,3)9种方式,和(1,7)3种方式。
用来解决这个问题的方法
将输入作为正整数数组。
函数计数对将所有数组元素作为整数列表。
按升序对输入数组元素进行排序。
对于数组的每个元素,找到最大和,使得每个元素都在'2'的幂中。
示例
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]))输出结果
4