From a2894ab194240a00ab575ced93fda0716b1b29eb Mon Sep 17 00:00:00 2001 From: yanglbme Date: Mon, 2 Jun 2025 20:26:48 +0800 Subject: [PATCH] feat: add rust solution to lc problem: No.135 No.0135.Candy --- solution/0100-0199/0135.Candy/README.md | 71 ++++++++------------ solution/0100-0199/0135.Candy/README_EN.md | 71 ++++++++------------ solution/0100-0199/0135.Candy/Solution.rs | 25 +++++++ solution/0100-0199/0135.Candy/Solution2.java | 27 -------- 4 files changed, 83 insertions(+), 111 deletions(-) create mode 100644 solution/0100-0199/0135.Candy/Solution.rs delete mode 100644 solution/0100-0199/0135.Candy/Solution2.java diff --git a/solution/0100-0199/0135.Candy/README.md b/solution/0100-0199/0135.Candy/README.md index 4b8fd0ef26673..94d99c0474c76 100644 --- a/solution/0100-0199/0135.Candy/README.md +++ b/solution/0100-0199/0135.Candy/README.md @@ -203,6 +203,35 @@ function candy(ratings: number[]): number { } ``` +#### Rust + +```rust +impl Solution { + pub fn candy(ratings: Vec) -> i32 { + let n = ratings.len(); + let mut left = vec![1; n]; + let mut right = vec![1; n]; + + for i in 1..n { + if ratings[i] > ratings[i - 1] { + left[i] = left[i - 1] + 1; + } + } + + for i in (0..n - 1).rev() { + if ratings[i] > ratings[i + 1] { + right[i] = right[i + 1] + 1; + } + } + + ratings.iter() + .enumerate() + .map(|(i, _)| left[i].max(right[i]) as i32) + .sum() + } +} +``` + #### C# ```cs @@ -236,46 +265,4 @@ public class Solution { - - -### 方法二 - - - -#### Java - -```java -class Solution { - public int candy(int[] ratings) { - int n = ratings.length; - int up = 0; - int down = 0; - int peak = 0; - int candies = 1; - for (int i = 1; i < n; i++) { - if (ratings[i - 1] < ratings[i]) { - up++; - peak = up + 1; - down = 0; - candies += peak; - } else if (ratings[i] == ratings[i - 1]) { - peak = 0; - up = 0; - down = 0; - candies++; - } else { - down++; - up = 0; - candies += down + (peak > down ? 0 : 1); - } - } - return candies; - } -} -``` - - - - - diff --git a/solution/0100-0199/0135.Candy/README_EN.md b/solution/0100-0199/0135.Candy/README_EN.md index a37b9e3a1bdb1..af62226fa2b1e 100644 --- a/solution/0100-0199/0135.Candy/README_EN.md +++ b/solution/0100-0199/0135.Candy/README_EN.md @@ -202,6 +202,35 @@ function candy(ratings: number[]): number { } ``` +#### Rust + +```rust +impl Solution { + pub fn candy(ratings: Vec) -> i32 { + let n = ratings.len(); + let mut left = vec![1; n]; + let mut right = vec![1; n]; + + for i in 1..n { + if ratings[i] > ratings[i - 1] { + left[i] = left[i - 1] + 1; + } + } + + for i in (0..n - 1).rev() { + if ratings[i] > ratings[i + 1] { + right[i] = right[i + 1] + 1; + } + } + + ratings.iter() + .enumerate() + .map(|(i, _)| left[i].max(right[i]) as i32) + .sum() + } +} +``` + #### C# ```cs @@ -235,46 +264,4 @@ public class Solution { - - -### Solution 2 - - - -#### Java - -```java -class Solution { - public int candy(int[] ratings) { - int n = ratings.length; - int up = 0; - int down = 0; - int peak = 0; - int candies = 1; - for (int i = 1; i < n; i++) { - if (ratings[i - 1] < ratings[i]) { - up++; - peak = up + 1; - down = 0; - candies += peak; - } else if (ratings[i] == ratings[i - 1]) { - peak = 0; - up = 0; - down = 0; - candies++; - } else { - down++; - up = 0; - candies += down + (peak > down ? 0 : 1); - } - } - return candies; - } -} -``` - - - - - diff --git a/solution/0100-0199/0135.Candy/Solution.rs b/solution/0100-0199/0135.Candy/Solution.rs new file mode 100644 index 0000000000000..17ad371df3999 --- /dev/null +++ b/solution/0100-0199/0135.Candy/Solution.rs @@ -0,0 +1,25 @@ +impl Solution { + pub fn candy(ratings: Vec) -> i32 { + let n = ratings.len(); + let mut left = vec![1; n]; + let mut right = vec![1; n]; + + for i in 1..n { + if ratings[i] > ratings[i - 1] { + left[i] = left[i - 1] + 1; + } + } + + for i in (0..n - 1).rev() { + if ratings[i] > ratings[i + 1] { + right[i] = right[i + 1] + 1; + } + } + + ratings + .iter() + .enumerate() + .map(|(i, _)| left[i].max(right[i]) as i32) + .sum() + } +} diff --git a/solution/0100-0199/0135.Candy/Solution2.java b/solution/0100-0199/0135.Candy/Solution2.java deleted file mode 100644 index 12695f93146a2..0000000000000 --- a/solution/0100-0199/0135.Candy/Solution2.java +++ /dev/null @@ -1,27 +0,0 @@ -class Solution { - public int candy(int[] ratings) { - int n = ratings.length; - int up = 0; - int down = 0; - int peak = 0; - int candies = 1; - for (int i = 1; i < n; i++) { - if (ratings[i - 1] < ratings[i]) { - up++; - peak = up + 1; - down = 0; - candies += peak; - } else if (ratings[i] == ratings[i - 1]) { - peak = 0; - up = 0; - down = 0; - candies++; - } else { - down++; - up = 0; - candies += down + (peak > down ? 0 : 1); - } - } - return candies; - } -} \ No newline at end of file