题目
https://leetcode-cn.com/problems/count-good-meals/
代码
class Solution {
public int countPairs(int[] deliciousness) {
int mod=1000000007;
int len=deliciousness.length;
int count=0;//结果
HashMap<Integer,Integer> map=new HashMap<>();//餐品的美味程度,同等美味程度的餐品的个数
int max=0;
for(int i=0;i<len;i++){
max=Math.max(deliciousness[i],max);
}
int mmax=max*2;//任意两个元素之和都不会超过max*2
//遍历时,当前下标一定大于已有下标,所以不会出现重复计算
for(int i=0;i<len;i++){
for(int j=1;j<=mmax;j=j<<1){//2的幂
if(map.containsKey(j-deliciousness[i])){
count=(count+map.get(j-deliciousness[i]))%mod;
}
}
map.put(deliciousness[i],map.getOrDefault(deliciousness[i],0)+1);
}
return count;
}
}