Skip to content

Commit bcd187d

Browse files
committedJul 7, 2021
feat: add solutions to lc problem: No. 1711.Count Good Meals
1 parent a3bd72c commit bcd187d

File tree

5 files changed

+178
-2
lines changed

5 files changed

+178
-2
lines changed
 

‎solution/1700-1799/1711.Count Good Meals/README.md

+62-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444

4545
## 解法
4646

47+
用最暴力的方法枚举每对元素肯定会超时,可以用哈希表优化对**之前元素出现次数**的查询。
48+
4749
<!-- 这里可写通用的实现逻辑 -->
4850

4951
<!-- tabs:start -->
@@ -53,15 +55,74 @@
5355
<!-- 这里可写当前语言的特殊实现逻辑 -->
5456

5557
```python
56-
58+
class Solution:
59+
def countPairs(self, deliciousness: List[int]) -> int:
60+
mod = 1000000007
61+
limit = max(deliciousness) * 2
62+
pairs = 0
63+
freq = collections.defaultdict(int)
64+
for d in deliciousness:
65+
target = 1
66+
while target <= limit:
67+
pairs = (pairs + freq[target - d]) % mod
68+
target = target << 1
69+
freq[d] += 1
70+
return pairs
5771
```
5872

5973
### **Java**
6074

6175
<!-- 这里可写当前语言的特殊实现逻辑 -->
6276

6377
```java
78+
class Solution {
79+
80+
private static final int MOD = 1000000007;
81+
82+
public int countPairs(int[] deliciousness) {
83+
int limit = Arrays.stream(deliciousness).max().getAsInt() * 2;
84+
int pairs = 0;
85+
Map<Integer, Integer> freq = new HashMap<>();
86+
for (int d : deliciousness) {
87+
for (int sum = 1; sum <= limit; sum <<= 1) {
88+
int count = freq.getOrDefault(sum - d, 0);
89+
pairs = (pairs + count) % MOD;
90+
}
91+
freq.merge(d, 1, Integer::sum);
92+
}
93+
return pairs;
94+
}
95+
}
96+
```
6497

98+
### **Go**
99+
100+
```go
101+
const mod int = 1e9 + 7
102+
103+
func countPairs(deliciousness []int) int {
104+
limit := 0
105+
for _, d := range deliciousness {
106+
limit = max(limit, d)
107+
}
108+
limit *= 2
109+
pairs := 0
110+
freq := make(map[int]int)
111+
for _, d := range deliciousness {
112+
for sum := 1; sum <= limit; sum <<= 1 {
113+
pairs = (pairs + freq[sum-d]) % mod
114+
}
115+
freq[d]++
116+
}
117+
return pairs
118+
}
119+
120+
func max(x, y int) int {
121+
if x > y {
122+
return x
123+
}
124+
return y
125+
}
65126
```
66127

67128
### **...**

‎solution/1700-1799/1711.Count Good Meals/README_EN.md

+60-1
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,72 @@ Their respective sums are 4, 8, 8, and 16, all of which are powers of 2.
4545
### **Python3**
4646

4747
```python
48-
48+
class Solution:
49+
def countPairs(self, deliciousness: List[int]) -> int:
50+
mod = 1000000007
51+
limit = max(deliciousness) * 2
52+
pairs = 0
53+
freq = collections.defaultdict(int)
54+
for d in deliciousness:
55+
target = 1
56+
while target <= limit:
57+
pairs = (pairs + freq[target - d]) % mod
58+
target = target << 1
59+
freq[d] += 1
60+
return pairs
4961
```
5062

5163
### **Java**
5264

5365
```java
66+
class Solution {
67+
68+
private static final int MOD = 1000000007;
69+
70+
public int countPairs(int[] deliciousness) {
71+
int limit = Arrays.stream(deliciousness).max().getAsInt() * 2;
72+
int pairs = 0;
73+
Map<Integer, Integer> freq = new HashMap<>();
74+
for (int d : deliciousness) {
75+
for (int sum = 1; sum <= limit; sum <<= 1) {
76+
int count = freq.getOrDefault(sum - d, 0);
77+
pairs = (pairs + count) % MOD;
78+
}
79+
freq.merge(d, 1, Integer::sum);
80+
}
81+
return pairs;
82+
}
83+
}
84+
```
5485

86+
### **Go**
87+
88+
```go
89+
const mod int = 1e9 + 7
90+
91+
func countPairs(deliciousness []int) int {
92+
limit := 0
93+
for _, d := range deliciousness {
94+
limit = max(limit, d)
95+
}
96+
limit *= 2
97+
pairs := 0
98+
freq := make(map[int]int)
99+
for _, d := range deliciousness {
100+
for sum := 1; sum <= limit; sum <<= 1 {
101+
pairs = (pairs + freq[sum-d]) % mod
102+
}
103+
freq[d]++
104+
}
105+
return pairs
106+
}
107+
108+
func max(x, y int) int {
109+
if x > y {
110+
return x
111+
}
112+
return y
113+
}
55114
```
56115

57116
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const mod int = 1e9 + 7
2+
3+
func countPairs(deliciousness []int) int {
4+
limit := 0
5+
for _, d := range deliciousness {
6+
limit = max(limit, d)
7+
}
8+
limit *= 2
9+
pairs := 0
10+
freq := make(map[int]int)
11+
for _, d := range deliciousness {
12+
for sum := 1; sum <= limit; sum <<= 1 {
13+
pairs = (pairs + freq[sum-d]) % mod
14+
}
15+
freq[d]++
16+
}
17+
return pairs
18+
}
19+
20+
func max(x, y int) int {
21+
if x > y {
22+
return x
23+
}
24+
return y
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
3+
private static final int MOD = 1000000007;
4+
5+
public int countPairs(int[] deliciousness) {
6+
int limit = Arrays.stream(deliciousness).max().getAsInt() * 2;
7+
int pairs = 0;
8+
Map<Integer, Integer> freq = new HashMap<>();
9+
for (int d : deliciousness) {
10+
for (int sum = 1; sum <= limit; sum <<= 1) {
11+
int count = freq.getOrDefault(sum - d, 0);
12+
pairs = (pairs + count) % MOD;
13+
}
14+
freq.merge(d, 1, Integer::sum);
15+
}
16+
return pairs;
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def countPairs(self, deliciousness: List[int]) -> int:
3+
mod = 1000000007
4+
limit = max(deliciousness) * 2
5+
pairs = 0
6+
freq = collections.defaultdict(int)
7+
for d in deliciousness:
8+
target = 1
9+
while target <= limit:
10+
pairs = (pairs + freq[target - d]) % mod
11+
target = target << 1
12+
freq[d] += 1
13+
return pairs

0 commit comments

Comments
 (0)