File tree Expand file tree Collapse file tree 3 files changed +121
-0
lines changed
solution/2000-2099/2054.Two Best Non-Overlapping Events Expand file tree Collapse file tree 3 files changed +121
-0
lines changed Original file line number Diff line number Diff 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 -->
Original file line number Diff line number Diff 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 -->
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments