大餐计数

使用哈希表存储数组中的每个元素的出现次数,遍历到数组 deliciousness 中的某个元素时,在哈希表中寻找与当前元素的和等于 2 的幂的元素个数,然后用当前元素更新哈希表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
const int mod = 1e9 + 7;
int countPairs(vector<int>& d) {
int maxVal = *max_element(d.begin(), d.end());
int maxSum = maxVal * 2;
int pairs = 0;
unordered_map<int, int> mp;
int n = d.size();
for (auto& val : d) {
for (int sum = 1; sum <= maxSum; sum <<= 1) {
int count = mp.count(sum - val) ? mp[sum - val] : 0;
pairs = (pairs + count) % mod;
}
mp[val]++;
}
return pairs;
}
};