Skip to content

Commit cd35764

Browse files
committed
feat: add rust solution to lc problem: No.2054
1 parent ad034a8 commit cd35764

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed

solution/2000-2099/2054.Two Best Non-Overlapping Events/README.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,48 @@ function maxTwoEvents(events: number[][]): number {
230230
}
231231
```
232232

233+
#### Rust
234+
235+
```rust
236+
impl Solution {
237+
pub fn max_two_events(mut events: Vec<Vec<i32>>) -> i32 {
238+
events.sort_by(|a, b| a[0].cmp(&b[0]));
239+
240+
let n: usize = events.len();
241+
let mut f: Vec<i32> = vec![0; n + 1];
242+
243+
for i in (0..n).rev() {
244+
f[i] = f[i + 1].max(events[i][2]);
245+
}
246+
247+
let mut ans: i32 = 0;
248+
249+
for e in &events {
250+
let mut v: i32 = e[2];
251+
252+
let mut left: usize = 0;
253+
let mut right: usize = n;
254+
while left < right {
255+
let mid = (left + right) >> 1;
256+
if events[mid][0] > e[1] {
257+
right = mid;
258+
} else {
259+
left = mid + 1;
260+
}
261+
}
262+
263+
if left < n {
264+
v += f[left];
265+
}
266+
267+
ans = ans.max(v);
268+
}
269+
270+
ans
271+
}
272+
}
273+
```
274+
233275
<!-- tabs:end -->
234276

235277
<!-- solution:end -->

solution/2000-2099/2054.Two Best Non-Overlapping Events/README_EN.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,48 @@ function maxTwoEvents(events: number[][]): number {
225225
}
226226
```
227227

228+
#### Rust
229+
230+
```rust
231+
impl Solution {
232+
pub fn max_two_events(mut events: Vec<Vec<i32>>) -> i32 {
233+
events.sort_by(|a, b| a[0].cmp(&b[0]));
234+
235+
let n: usize = events.len();
236+
let mut f: Vec<i32> = vec![0; n + 1];
237+
238+
for i in (0..n).rev() {
239+
f[i] = f[i + 1].max(events[i][2]);
240+
}
241+
242+
let mut ans: i32 = 0;
243+
244+
for e in &events {
245+
let mut v: i32 = e[2];
246+
247+
let mut left: usize = 0;
248+
let mut right: usize = n;
249+
while left < right {
250+
let mid = (left + right) >> 1;
251+
if events[mid][0] > e[1] {
252+
right = mid;
253+
} else {
254+
left = mid + 1;
255+
}
256+
}
257+
258+
if left < n {
259+
v += f[left];
260+
}
261+
262+
ans = ans.max(v);
263+
}
264+
265+
ans
266+
}
267+
}
268+
```
269+
228270
<!-- tabs:end -->
229271

230272
<!-- solution:end -->
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
impl Solution {
2+
pub fn max_two_events(mut events: Vec<Vec<i32>>) -> i32 {
3+
events.sort_by(|a, b| a[0].cmp(&b[0]));
4+
5+
let n: usize = events.len();
6+
let mut f: Vec<i32> = vec![0; n + 1];
7+
8+
for i in (0..n).rev() {
9+
f[i] = f[i + 1].max(events[i][2]);
10+
}
11+
12+
let mut ans: i32 = 0;
13+
14+
for e in &events {
15+
let mut v: i32 = e[2];
16+
17+
let mut left: usize = 0;
18+
let mut right: usize = n;
19+
while left < right {
20+
let mid = (left + right) >> 1;
21+
if events[mid][0] > e[1] {
22+
right = mid;
23+
} else {
24+
left = mid + 1;
25+
}
26+
}
27+
28+
if left < n {
29+
v += f[left];
30+
}
31+
32+
ans = ans.max(v);
33+
}
34+
35+
ans
36+
}
37+
}

0 commit comments

Comments
 (0)