leet-code/src/main/java/leetcode/editor/cn/CountGoodMeals.java
2021-07-07 16:40:14 +08:00

69 lines
2.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//大餐 是指 恰好包含两道不同餐品 的一餐,其美味程度之和等于 2 的幂。
//
// 你可以搭配 任意 两道餐品做一顿大餐。
//
// 给你一个整数数组 deliciousness ,其中 deliciousness[i] 是第 i 道餐品的美味程度,返回你可以用数组中的餐品做出的不同 大
//餐 的数量。结果需要对 109 + 7 取余。
//
// 注意,只要餐品下标不同,就可以认为是不同的餐品,即便它们的美味程度相同。
//
//
//
// 示例 1
//
//
//输入deliciousness = [1,3,5,7,9]
//输出4
//解释:大餐的美味程度组合为 (1,3) 、(1,7) 、(3,5) 和 (7,9) 。
//它们各自的美味程度之和分别为 4 、8 、8 和 16 ,都是 2 的幂。
//
//
// 示例 2
//
//
//输入deliciousness = [1,1,1,3,3,3,7]
//输出15
//解释:大餐的美味程度组合为 3 种 (1,1) 9 种 (1,3) ,和 3 种 (1,7) 。
//
//
//
// 提示:
//
//
// 1 <= deliciousness.length <= 105
// 0 <= deliciousness[i] <= 220
//
// Related Topics 数组 哈希表
// 👍 72 👎 0
package leetcode.editor.cn;
import java.util.HashMap;
import java.util.Map;
//1711:大餐计数
public class CountGoodMeals {
public static void main(String[] args) {
//测试代码
Solution solution = new CountGoodMeals().new Solution();
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int countPairs(int[] deliciousness) {
Map<Integer, Integer> map = new HashMap<>();
int result = 0;
for (int num : deliciousness) {
for (int i = 1; i < 22; i++) {
result += map.getOrDefault(1 << i - num, 0);
result %= 100000007;
}
map.put(num, map.getOrDefault(num, 0) + 1);
}
return result;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}