Skip to content

Commit 9716c9c

Browse files
authored
feat: add rust solution to lc problem: No.135 (#4456)
No.0135.Candy
1 parent befa1c5 commit 9716c9c

File tree

4 files changed

+83
-111
lines changed

4 files changed

+83
-111
lines changed

solution/0100-0199/0135.Candy/README.md

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,35 @@ function candy(ratings: number[]): number {
203203
}
204204
```
205205

206+
#### Rust
207+
208+
```rust
209+
impl Solution {
210+
pub fn candy(ratings: Vec<i32>) -> i32 {
211+
let n = ratings.len();
212+
let mut left = vec![1; n];
213+
let mut right = vec![1; n];
214+
215+
for i in 1..n {
216+
if ratings[i] > ratings[i - 1] {
217+
left[i] = left[i - 1] + 1;
218+
}
219+
}
220+
221+
for i in (0..n - 1).rev() {
222+
if ratings[i] > ratings[i + 1] {
223+
right[i] = right[i + 1] + 1;
224+
}
225+
}
226+
227+
ratings.iter()
228+
.enumerate()
229+
.map(|(i, _)| left[i].max(right[i]) as i32)
230+
.sum()
231+
}
232+
}
233+
```
234+
206235
#### C#
207236

208237
```cs
@@ -236,46 +265,4 @@ public class Solution {
236265

237266
<!-- solution:end -->
238267

239-
<!-- solution:start -->
240-
241-
### 方法二
242-
243-
<!-- tabs:start -->
244-
245-
#### Java
246-
247-
```java
248-
class Solution {
249-
public int candy(int[] ratings) {
250-
int n = ratings.length;
251-
int up = 0;
252-
int down = 0;
253-
int peak = 0;
254-
int candies = 1;
255-
for (int i = 1; i < n; i++) {
256-
if (ratings[i - 1] < ratings[i]) {
257-
up++;
258-
peak = up + 1;
259-
down = 0;
260-
candies += peak;
261-
} else if (ratings[i] == ratings[i - 1]) {
262-
peak = 0;
263-
up = 0;
264-
down = 0;
265-
candies++;
266-
} else {
267-
down++;
268-
up = 0;
269-
candies += down + (peak > down ? 0 : 1);
270-
}
271-
}
272-
return candies;
273-
}
274-
}
275-
```
276-
277-
<!-- tabs:end -->
278-
279-
<!-- solution:end -->
280-
281268
<!-- problem:end -->

solution/0100-0199/0135.Candy/README_EN.md

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,35 @@ function candy(ratings: number[]): number {
202202
}
203203
```
204204

205+
#### Rust
206+
207+
```rust
208+
impl Solution {
209+
pub fn candy(ratings: Vec<i32>) -> i32 {
210+
let n = ratings.len();
211+
let mut left = vec![1; n];
212+
let mut right = vec![1; n];
213+
214+
for i in 1..n {
215+
if ratings[i] > ratings[i - 1] {
216+
left[i] = left[i - 1] + 1;
217+
}
218+
}
219+
220+
for i in (0..n - 1).rev() {
221+
if ratings[i] > ratings[i + 1] {
222+
right[i] = right[i + 1] + 1;
223+
}
224+
}
225+
226+
ratings.iter()
227+
.enumerate()
228+
.map(|(i, _)| left[i].max(right[i]) as i32)
229+
.sum()
230+
}
231+
}
232+
```
233+
205234
#### C#
206235

207236
```cs
@@ -235,46 +264,4 @@ public class Solution {
235264

236265
<!-- solution:end -->
237266

238-
<!-- solution:start -->
239-
240-
### Solution 2
241-
242-
<!-- tabs:start -->
243-
244-
#### Java
245-
246-
```java
247-
class Solution {
248-
public int candy(int[] ratings) {
249-
int n = ratings.length;
250-
int up = 0;
251-
int down = 0;
252-
int peak = 0;
253-
int candies = 1;
254-
for (int i = 1; i < n; i++) {
255-
if (ratings[i - 1] < ratings[i]) {
256-
up++;
257-
peak = up + 1;
258-
down = 0;
259-
candies += peak;
260-
} else if (ratings[i] == ratings[i - 1]) {
261-
peak = 0;
262-
up = 0;
263-
down = 0;
264-
candies++;
265-
} else {
266-
down++;
267-
up = 0;
268-
candies += down + (peak > down ? 0 : 1);
269-
}
270-
}
271-
return candies;
272-
}
273-
}
274-
```
275-
276-
<!-- tabs:end -->
277-
278-
<!-- solution:end -->
279-
280267
<!-- problem:end -->
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
impl Solution {
2+
pub fn candy(ratings: Vec<i32>) -> i32 {
3+
let n = ratings.len();
4+
let mut left = vec![1; n];
5+
let mut right = vec![1; n];
6+
7+
for i in 1..n {
8+
if ratings[i] > ratings[i - 1] {
9+
left[i] = left[i - 1] + 1;
10+
}
11+
}
12+
13+
for i in (0..n - 1).rev() {
14+
if ratings[i] > ratings[i + 1] {
15+
right[i] = right[i + 1] + 1;
16+
}
17+
}
18+
19+
ratings
20+
.iter()
21+
.enumerate()
22+
.map(|(i, _)| left[i].max(right[i]) as i32)
23+
.sum()
24+
}
25+
}

solution/0100-0199/0135.Candy/Solution2.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)