From cd357647adfec55032fdce1c9ee597a81472828d Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Tue, 23 Dec 2025 07:25:43 +0800 Subject: [PATCH] feat: add rust solution to lc problem: No.2054 --- .../README.md | 42 +++++++++++++++++++ .../README_EN.md | 42 +++++++++++++++++++ .../Solution.rs | 37 ++++++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 solution/2000-2099/2054.Two Best Non-Overlapping Events/Solution.rs diff --git a/solution/2000-2099/2054.Two Best Non-Overlapping Events/README.md b/solution/2000-2099/2054.Two Best Non-Overlapping Events/README.md index 22efaf46225b6..815d1deb89e41 100644 --- a/solution/2000-2099/2054.Two Best Non-Overlapping Events/README.md +++ b/solution/2000-2099/2054.Two Best Non-Overlapping Events/README.md @@ -230,6 +230,48 @@ function maxTwoEvents(events: number[][]): number { } ``` +#### Rust + +```rust +impl Solution { + pub fn max_two_events(mut events: Vec>) -> i32 { + events.sort_by(|a, b| a[0].cmp(&b[0])); + + let n: usize = events.len(); + let mut f: Vec = vec![0; n + 1]; + + for i in (0..n).rev() { + f[i] = f[i + 1].max(events[i][2]); + } + + let mut ans: i32 = 0; + + for e in &events { + let mut v: i32 = e[2]; + + let mut left: usize = 0; + let mut right: usize = n; + while left < right { + let mid = (left + right) >> 1; + if events[mid][0] > e[1] { + right = mid; + } else { + left = mid + 1; + } + } + + if left < n { + v += f[left]; + } + + ans = ans.max(v); + } + + ans + } +} +``` + diff --git a/solution/2000-2099/2054.Two Best Non-Overlapping Events/README_EN.md b/solution/2000-2099/2054.Two Best Non-Overlapping Events/README_EN.md index b2f2af73217a3..638e2bf7c30ea 100644 --- a/solution/2000-2099/2054.Two Best Non-Overlapping Events/README_EN.md +++ b/solution/2000-2099/2054.Two Best Non-Overlapping Events/README_EN.md @@ -225,6 +225,48 @@ function maxTwoEvents(events: number[][]): number { } ``` +#### Rust + +```rust +impl Solution { + pub fn max_two_events(mut events: Vec>) -> i32 { + events.sort_by(|a, b| a[0].cmp(&b[0])); + + let n: usize = events.len(); + let mut f: Vec = vec![0; n + 1]; + + for i in (0..n).rev() { + f[i] = f[i + 1].max(events[i][2]); + } + + let mut ans: i32 = 0; + + for e in &events { + let mut v: i32 = e[2]; + + let mut left: usize = 0; + let mut right: usize = n; + while left < right { + let mid = (left + right) >> 1; + if events[mid][0] > e[1] { + right = mid; + } else { + left = mid + 1; + } + } + + if left < n { + v += f[left]; + } + + ans = ans.max(v); + } + + ans + } +} +``` + diff --git a/solution/2000-2099/2054.Two Best Non-Overlapping Events/Solution.rs b/solution/2000-2099/2054.Two Best Non-Overlapping Events/Solution.rs new file mode 100644 index 0000000000000..3c0696758ac68 --- /dev/null +++ b/solution/2000-2099/2054.Two Best Non-Overlapping Events/Solution.rs @@ -0,0 +1,37 @@ +impl Solution { + pub fn max_two_events(mut events: Vec>) -> i32 { + events.sort_by(|a, b| a[0].cmp(&b[0])); + + let n: usize = events.len(); + let mut f: Vec = vec![0; n + 1]; + + for i in (0..n).rev() { + f[i] = f[i + 1].max(events[i][2]); + } + + let mut ans: i32 = 0; + + for e in &events { + let mut v: i32 = e[2]; + + let mut left: usize = 0; + let mut right: usize = n; + while left < right { + let mid = (left + right) >> 1; + if events[mid][0] > e[1] { + right = mid; + } else { + left = mid + 1; + } + } + + if left < n { + v += f[left]; + } + + ans = ans.max(v); + } + + ans + } +}