Skip to content

Commit 09a6701

Browse files
committed
feat: add solutions to lc problems: No.2511, 2512
- No.2511.Maximum Enemy Forts That Can Be Captured - No.2512.Reward Top K Students
1 parent 0e9d040 commit 09a6701

File tree

8 files changed

+367
-0
lines changed

8 files changed

+367
-0
lines changed

solution/2500-2599/2511.Maximum Enemy Forts That Can Be Captured/README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,54 @@ func max(a, b int) int {
165165
}
166166
```
167167

168+
### **TypeScript**
169+
170+
```ts
171+
function captureForts(forts: number[]): number {
172+
const n = forts.length;
173+
let ans = 0;
174+
let i = 0;
175+
while (i < n) {
176+
let j = i + 1;
177+
if (forts[i] !== 0) {
178+
while (j < n && forts[j] === 0) {
179+
j++;
180+
}
181+
if (j < n && forts[i] + forts[j] === 0) {
182+
ans = Math.max(ans, j - i - 1);
183+
}
184+
}
185+
i = j;
186+
}
187+
return ans;
188+
}
189+
```
190+
191+
### **Rust**
192+
193+
```rust
194+
impl Solution {
195+
pub fn capture_forts(forts: Vec<i32>) -> i32 {
196+
let n = forts.len();
197+
let mut ans = 0;
198+
let mut i = 0;
199+
while i < n {
200+
let mut j = i + 1;
201+
if forts[i] != 0 {
202+
while j < n && forts[j] == 0 {
203+
j += 1;
204+
}
205+
if j < n && forts[i] + forts[j] == 0 {
206+
ans = ans.max(j - i - 1);
207+
}
208+
}
209+
i = j;
210+
}
211+
ans as i32
212+
}
213+
}
214+
```
215+
168216
### **...**
169217

170218
```

solution/2500-2599/2511.Maximum Enemy Forts That Can Be Captured/README_EN.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,54 @@ func max(a, b int) int {
151151
}
152152
```
153153

154+
### **TypeScript**
155+
156+
```ts
157+
function captureForts(forts: number[]): number {
158+
const n = forts.length;
159+
let ans = 0;
160+
let i = 0;
161+
while (i < n) {
162+
let j = i + 1;
163+
if (forts[i] !== 0) {
164+
while (j < n && forts[j] === 0) {
165+
j++;
166+
}
167+
if (j < n && forts[i] + forts[j] === 0) {
168+
ans = Math.max(ans, j - i - 1);
169+
}
170+
}
171+
i = j;
172+
}
173+
return ans;
174+
}
175+
```
176+
177+
### **Rust**
178+
179+
```rust
180+
impl Solution {
181+
pub fn capture_forts(forts: Vec<i32>) -> i32 {
182+
let n = forts.len();
183+
let mut ans = 0;
184+
let mut i = 0;
185+
while i < n {
186+
let mut j = i + 1;
187+
if forts[i] != 0 {
188+
while j < n && forts[j] == 0 {
189+
j += 1;
190+
}
191+
if j < n && forts[i] + forts[j] == 0 {
192+
ans = ans.max(j - i - 1);
193+
}
194+
}
195+
i = j;
196+
}
197+
ans as i32
198+
}
199+
}
200+
```
201+
154202
### **...**
155203

156204
```
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
impl Solution {
2+
pub fn capture_forts(forts: Vec<i32>) -> i32 {
3+
let n = forts.len();
4+
let mut ans = 0;
5+
let mut i = 0;
6+
while i < n {
7+
let mut j = i + 1;
8+
if forts[i] != 0 {
9+
while j < n && forts[j] == 0 {
10+
j += 1;
11+
}
12+
if j < n && forts[i] + forts[j] == 0 {
13+
ans = ans.max(j - i - 1);
14+
}
15+
}
16+
i = j;
17+
}
18+
ans as i32
19+
}
20+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
function captureForts(forts: number[]): number {
2+
const n = forts.length;
3+
let ans = 0;
4+
let i = 0;
5+
while (i < n) {
6+
let j = i + 1;
7+
if (forts[i] !== 0) {
8+
while (j < n && forts[j] === 0) {
9+
j++;
10+
}
11+
if (j < n && forts[i] + forts[j] === 0) {
12+
ans = Math.max(ans, j - i - 1);
13+
}
14+
}
15+
i = j;
16+
}
17+
return ans;
18+
}

solution/2500-2599/2512.Reward Top K Students/README.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,87 @@ func topStudents(positive_feedback []string, negative_feedback []string, report
202202
}
203203
```
204204

205+
### **TypeScript**
206+
207+
```ts
208+
function topStudents(
209+
positive_feedback: string[],
210+
negative_feedback: string[],
211+
report: string[],
212+
student_id: number[],
213+
k: number,
214+
): number[] {
215+
const n = student_id.length;
216+
const map = new Map<number, number>();
217+
const ps = new Set(positive_feedback);
218+
const ns = new Set(negative_feedback);
219+
for (let i = 0; i < n; i++) {
220+
map.set(
221+
student_id[i],
222+
report[i].split(' ').reduce((r, s) => {
223+
if (ps.has(s)) {
224+
return r + 3;
225+
}
226+
if (ns.has(s)) {
227+
return r - 1;
228+
}
229+
return r;
230+
}, 0),
231+
);
232+
}
233+
return [...map.entries()]
234+
.sort((a, b) => {
235+
if (a[1] === b[1]) {
236+
return a[0] - b[0];
237+
}
238+
return b[1] - a[1];
239+
})
240+
.map(v => v[0])
241+
.slice(0, k);
242+
}
243+
```
244+
245+
### **Rust**
246+
247+
```rust
248+
use std::collections::{HashMap, HashSet};
249+
impl Solution {
250+
pub fn top_students(
251+
positive_feedback: Vec<String>,
252+
negative_feedback: Vec<String>,
253+
report: Vec<String>,
254+
student_id: Vec<i32>,
255+
k: i32,
256+
) -> Vec<i32> {
257+
let n = student_id.len();
258+
let ps = positive_feedback.iter().collect::<HashSet<&String>>();
259+
let ns = negative_feedback.iter().collect::<HashSet<&String>>();
260+
let mut map = HashMap::new();
261+
for i in 0..n {
262+
let id = student_id[i];
263+
let mut count = 0;
264+
for s in report[i].split(' ') {
265+
let s = &s.to_string();
266+
if ps.contains(s) {
267+
count += 3;
268+
} else if ns.contains(s) {
269+
count -= 1;
270+
}
271+
}
272+
map.insert(id, count);
273+
}
274+
let mut t = map.into_iter().collect::<Vec<(i32, i32)>>();
275+
t.sort_by(|a, b| {
276+
if a.1 == b.1 {
277+
return a.0.cmp(&b.0);
278+
}
279+
b.1.cmp(&a.1)
280+
});
281+
t.iter().map(|v| v.0).collect::<Vec<i32>>()[0..k as usize].to_vec()
282+
}
283+
}
284+
```
285+
205286
### **...**
206287

207288
```

solution/2500-2599/2512.Reward Top K Students/README_EN.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,87 @@ func topStudents(positive_feedback []string, negative_feedback []string, report
194194
}
195195
```
196196

197+
### **TypeScript**
198+
199+
```ts
200+
function topStudents(
201+
positive_feedback: string[],
202+
negative_feedback: string[],
203+
report: string[],
204+
student_id: number[],
205+
k: number,
206+
): number[] {
207+
const n = student_id.length;
208+
const map = new Map<number, number>();
209+
const ps = new Set(positive_feedback);
210+
const ns = new Set(negative_feedback);
211+
for (let i = 0; i < n; i++) {
212+
map.set(
213+
student_id[i],
214+
report[i].split(' ').reduce((r, s) => {
215+
if (ps.has(s)) {
216+
return r + 3;
217+
}
218+
if (ns.has(s)) {
219+
return r - 1;
220+
}
221+
return r;
222+
}, 0),
223+
);
224+
}
225+
return [...map.entries()]
226+
.sort((a, b) => {
227+
if (a[1] === b[1]) {
228+
return a[0] - b[0];
229+
}
230+
return b[1] - a[1];
231+
})
232+
.map(v => v[0])
233+
.slice(0, k);
234+
}
235+
```
236+
237+
### **Rust**
238+
239+
```rust
240+
use std::collections::{HashMap, HashSet};
241+
impl Solution {
242+
pub fn top_students(
243+
positive_feedback: Vec<String>,
244+
negative_feedback: Vec<String>,
245+
report: Vec<String>,
246+
student_id: Vec<i32>,
247+
k: i32,
248+
) -> Vec<i32> {
249+
let n = student_id.len();
250+
let ps = positive_feedback.iter().collect::<HashSet<&String>>();
251+
let ns = negative_feedback.iter().collect::<HashSet<&String>>();
252+
let mut map = HashMap::new();
253+
for i in 0..n {
254+
let id = student_id[i];
255+
let mut count = 0;
256+
for s in report[i].split(' ') {
257+
let s = &s.to_string();
258+
if ps.contains(s) {
259+
count += 3;
260+
} else if ns.contains(s) {
261+
count -= 1;
262+
}
263+
}
264+
map.insert(id, count);
265+
}
266+
let mut t = map.into_iter().collect::<Vec<(i32, i32)>>();
267+
t.sort_by(|a, b| {
268+
if a.1 == b.1 {
269+
return a.0.cmp(&b.0);
270+
}
271+
b.1.cmp(&a.1)
272+
});
273+
t.iter().map(|v| v.0).collect::<Vec<i32>>()[0..k as usize].to_vec()
274+
}
275+
}
276+
```
277+
197278
### **...**
198279

199280
```
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use std::collections::{HashMap, HashSet};
2+
impl Solution {
3+
pub fn top_students(
4+
positive_feedback: Vec<String>,
5+
negative_feedback: Vec<String>,
6+
report: Vec<String>,
7+
student_id: Vec<i32>,
8+
k: i32,
9+
) -> Vec<i32> {
10+
let n = student_id.len();
11+
let ps = positive_feedback.iter().collect::<HashSet<&String>>();
12+
let ns = negative_feedback.iter().collect::<HashSet<&String>>();
13+
let mut map = HashMap::new();
14+
for i in 0..n {
15+
let id = student_id[i];
16+
let mut count = 0;
17+
for s in report[i].split(' ') {
18+
let s = &s.to_string();
19+
if ps.contains(s) {
20+
count += 3;
21+
} else if ns.contains(s) {
22+
count -= 1;
23+
}
24+
}
25+
map.insert(id, count);
26+
}
27+
let mut t = map.into_iter().collect::<Vec<(i32, i32)>>();
28+
t.sort_by(|a, b| {
29+
if a.1 == b.1 {
30+
return a.0.cmp(&b.0);
31+
}
32+
b.1.cmp(&a.1)
33+
});
34+
t.iter().map(|v| v.0).collect::<Vec<i32>>()[0..k as usize].to_vec()
35+
}
36+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
function topStudents(
2+
positive_feedback: string[],
3+
negative_feedback: string[],
4+
report: string[],
5+
student_id: number[],
6+
k: number,
7+
): number[] {
8+
const n = student_id.length;
9+
const map = new Map<number, number>();
10+
const ps = new Set(positive_feedback);
11+
const ns = new Set(negative_feedback);
12+
for (let i = 0; i < n; i++) {
13+
map.set(
14+
student_id[i],
15+
report[i].split(' ').reduce((r, s) => {
16+
if (ps.has(s)) {
17+
return r + 3;
18+
}
19+
if (ns.has(s)) {
20+
return r - 1;
21+
}
22+
return r;
23+
}, 0),
24+
);
25+
}
26+
return [...map.entries()]
27+
.sort((a, b) => {
28+
if (a[1] === b[1]) {
29+
return a[0] - b[0];
30+
}
31+
return b[1] - a[1];
32+
})
33+
.map(v => v[0])
34+
.slice(0, k);
35+
}

0 commit comments

Comments
 (0)