Skip to content

Commit bac2d3f

Browse files
authored
feat: add solutions to lc problems: No.2533,2555,2558,2560 (doocs#1506)
* No.2533.Number of Good Binary Strings * No.2555.Maximize Win From Two Segments * No.2557.Maximum Number of Integers to Choose From a Range II * No.2560.House Robber IV
1 parent cbc7f08 commit bac2d3f

File tree

13 files changed

+298
-4
lines changed

13 files changed

+298
-4
lines changed

solution/2500-2599/2533.Number of Good Binary Strings/README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,31 @@ func goodBinaryStrings(minLength int, maxLength int, oneGroup int, zeroGroup int
174174
}
175175
```
176176

177+
### **TypeScript**
178+
179+
```ts
180+
function goodBinaryStrings(
181+
minLength: number,
182+
maxLength: number,
183+
oneGroup: number,
184+
zeroGroup: number,
185+
): number {
186+
const mod = 10 ** 9 + 7;
187+
const f: number[] = Array(maxLength + 1).fill(0);
188+
f[0] = 1;
189+
for (let i = 1; i <= maxLength; ++i) {
190+
if (i >= oneGroup) {
191+
f[i] += f[i - oneGroup];
192+
}
193+
if (i >= zeroGroup) {
194+
f[i] += f[i - zeroGroup];
195+
}
196+
f[i] %= mod;
197+
}
198+
return f.slice(minLength).reduce((a, b) => a + b, 0) % mod;
199+
}
200+
```
201+
177202
### **...**
178203

179204
```

solution/2500-2599/2533.Number of Good Binary Strings/README_EN.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,31 @@ func goodBinaryStrings(minLength int, maxLength int, oneGroup int, zeroGroup int
150150
}
151151
```
152152

153+
### **TypeScript**
154+
155+
```ts
156+
function goodBinaryStrings(
157+
minLength: number,
158+
maxLength: number,
159+
oneGroup: number,
160+
zeroGroup: number,
161+
): number {
162+
const mod = 10 ** 9 + 7;
163+
const f: number[] = Array(maxLength + 1).fill(0);
164+
f[0] = 1;
165+
for (let i = 1; i <= maxLength; ++i) {
166+
if (i >= oneGroup) {
167+
f[i] += f[i - oneGroup];
168+
}
169+
if (i >= zeroGroup) {
170+
f[i] += f[i - zeroGroup];
171+
}
172+
f[i] %= mod;
173+
}
174+
return f.slice(minLength).reduce((a, b) => a + b, 0) % mod;
175+
}
176+
```
177+
153178
### **...**
154179

155180
```
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function goodBinaryStrings(
2+
minLength: number,
3+
maxLength: number,
4+
oneGroup: number,
5+
zeroGroup: number,
6+
): number {
7+
const mod = 10 ** 9 + 7;
8+
const f: number[] = Array(maxLength + 1).fill(0);
9+
f[0] = 1;
10+
for (let i = 1; i <= maxLength; ++i) {
11+
if (i >= oneGroup) {
12+
f[i] += f[i - oneGroup];
13+
}
14+
if (i >= zeroGroup) {
15+
f[i] += f[i - zeroGroup];
16+
}
17+
f[i] %= mod;
18+
}
19+
return f.slice(minLength).reduce((a, b) => a + b, 0) % mod;
20+
}

solution/2500-2599/2555.Maximize Win From Two Segments/README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,36 @@ func max(a, b int) int {
154154
}
155155
```
156156

157+
### **TypeScript**
158+
159+
```ts
160+
function maximizeWin(prizePositions: number[], k: number): number {
161+
const n = prizePositions.length;
162+
const f: number[] = Array(n + 1).fill(0);
163+
let ans = 0;
164+
const search = (x: number): number => {
165+
let left = 0;
166+
let right = n;
167+
while (left < right) {
168+
const mid = (left + right) >> 1;
169+
if (prizePositions[mid] >= x) {
170+
right = mid;
171+
} else {
172+
left = mid + 1;
173+
}
174+
}
175+
return left;
176+
};
177+
for (let i = 1; i <= n; ++i) {
178+
const x = prizePositions[i - 1];
179+
const j = search(x - k);
180+
ans = Math.max(ans, f[j] + i - j);
181+
f[i] = Math.max(f[i - 1], i - j);
182+
}
183+
return ans;
184+
}
185+
```
186+
157187
### **...**
158188

159189
```

solution/2500-2599/2555.Maximize Win From Two Segments/README_EN.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,36 @@ func max(a, b int) int {
143143
}
144144
```
145145

146+
### **TypeScript**
147+
148+
```ts
149+
function maximizeWin(prizePositions: number[], k: number): number {
150+
const n = prizePositions.length;
151+
const f: number[] = Array(n + 1).fill(0);
152+
let ans = 0;
153+
const search = (x: number): number => {
154+
let left = 0;
155+
let right = n;
156+
while (left < right) {
157+
const mid = (left + right) >> 1;
158+
if (prizePositions[mid] >= x) {
159+
right = mid;
160+
} else {
161+
left = mid + 1;
162+
}
163+
}
164+
return left;
165+
};
166+
for (let i = 1; i <= n; ++i) {
167+
const x = prizePositions[i - 1];
168+
const j = search(x - k);
169+
ans = Math.max(ans, f[j] + i - j);
170+
f[i] = Math.max(f[i - 1], i - j);
171+
}
172+
return ans;
173+
}
174+
```
175+
146176
### **...**
147177

148178
```
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
function maximizeWin(prizePositions: number[], k: number): number {
2+
const n = prizePositions.length;
3+
const f: number[] = Array(n + 1).fill(0);
4+
let ans = 0;
5+
const search = (x: number): number => {
6+
let left = 0;
7+
let right = n;
8+
while (left < right) {
9+
const mid = (left + right) >> 1;
10+
if (prizePositions[mid] >= x) {
11+
right = mid;
12+
} else {
13+
left = mid + 1;
14+
}
15+
}
16+
return left;
17+
};
18+
for (let i = 1; i <= n; ++i) {
19+
const x = prizePositions[i - 1];
20+
const j = search(x - k);
21+
ans = Math.max(ans, f[j] + i - j);
22+
f[i] = Math.max(f[i - 1], i - j);
23+
}
24+
return ans;
25+
}

solution/2500-2599/2557.Maximum Number of Integers to Choose From a Range II/README.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,6 @@
5959

6060
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(n)$。其中 $n$ 为数组 `banned` 的长度。
6161

62-
相似题目:[2557. 从一个范围内选择最多整数 II](/solution/2500-2599/2557.Maximum%20Number%20of%20Integers%20to%20Choose%20From%20a%20Range%20II/README.md)
63-
64-
相似题目:[2556. 从一个范围内选择最多整数 I](/solution/2500-2599/2554.Maximum%20Number%20of%20Integers%20to%20Choose%20From%20a%20Range%20I/README.md)
65-
6662
<!-- tabs:start -->
6763

6864
### **Python3**

solution/2500-2599/2558.Take Gifts From the Richest Pile/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,27 @@ func (hp) Pop() (_ interface{}) { return }
144144
func (hp) Push(interface{}) {}
145145
```
146146

147+
### **TypeScript**
148+
149+
```ts
150+
function pickGifts(gifts: number[], k: number): number {
151+
const pq = new MaxPriorityQueue();
152+
for (const v of gifts) {
153+
pq.enqueue(v, v);
154+
}
155+
while (k--) {
156+
let v = pq.dequeue().element;
157+
v = Math.floor(Math.sqrt(v));
158+
pq.enqueue(v, v);
159+
}
160+
let ans = 0;
161+
while (!pq.isEmpty()) {
162+
ans += pq.dequeue().element;
163+
}
164+
return ans;
165+
}
166+
```
167+
147168
### **Rust**
148169

149170
```rust

solution/2500-2599/2558.Take Gifts From the Richest Pile/README_EN.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,27 @@ func (hp) Pop() (_ interface{}) { return }
126126
func (hp) Push(interface{}) {}
127127
```
128128

129+
### **TypeScript**
130+
131+
```ts
132+
function pickGifts(gifts: number[], k: number): number {
133+
const pq = new MaxPriorityQueue();
134+
for (const v of gifts) {
135+
pq.enqueue(v, v);
136+
}
137+
while (k--) {
138+
let v = pq.dequeue().element;
139+
v = Math.floor(Math.sqrt(v));
140+
pq.enqueue(v, v);
141+
}
142+
let ans = 0;
143+
while (!pq.isEmpty()) {
144+
ans += pq.dequeue().element;
145+
}
146+
return ans;
147+
}
148+
```
149+
129150
### **Rust**
130151

131152
```rust
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function pickGifts(gifts: number[], k: number): number {
2+
const pq = new MaxPriorityQueue();
3+
for (const v of gifts) {
4+
pq.enqueue(v, v);
5+
}
6+
while (k--) {
7+
let v = pq.dequeue().element;
8+
v = Math.floor(Math.sqrt(v));
9+
pq.enqueue(v, v);
10+
}
11+
let ans = 0;
12+
while (!pq.isEmpty()) {
13+
ans += pq.dequeue().element;
14+
}
15+
return ans;
16+
}

0 commit comments

Comments
 (0)