Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bcd187d

Browse files
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‎

Lines changed: 62 additions & 1 deletion
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‎

Lines changed: 60 additions & 1 deletion
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
### **...**
Lines changed: 25 additions & 0 deletions
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+
}
Lines changed: 18 additions & 0 deletions
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+
}
Lines changed: 13 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /