Skip to content

Commit e10c095

Browse files
authored
feat: add rust solution to lc problem: No.1891 (#1833)
No.1891.Cutting Ribbons
1 parent cc99c13 commit e10c095

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed

solution/1800-1899/1891.Cutting Ribbons/README.md

+27
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,33 @@ function maxLength(ribbons: number[], k: number): number {
228228
}
229229
```
230230

231+
### **Rust**
232+
233+
```rust
234+
impl Solution {
235+
fn max_length(ribbons: Vec<i32>, k: i32) -> i32 {
236+
let mut left = 0i32;
237+
let mut right = *ribbons.iter().max().unwrap();
238+
while left < right {
239+
let mid = (left + right + 1) / 2;
240+
let mut cnt = 0i32;
241+
for &entry in ribbons.iter() {
242+
cnt += entry / mid;
243+
if cnt >= k {
244+
break;
245+
}
246+
}
247+
if cnt >= k {
248+
left = mid;
249+
} else {
250+
right = mid - 1;
251+
}
252+
}
253+
return left;
254+
}
255+
}
256+
```
257+
231258
### **...**
232259

233260
```

solution/1800-1899/1891.Cutting Ribbons/README_EN.md

+27
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,33 @@ function maxLength(ribbons: number[], k: number): number {
213213
}
214214
```
215215

216+
### **Rust**
217+
218+
```rust
219+
impl Solution {
220+
fn max_length(ribbons: Vec<i32>, k: i32) -> i32 {
221+
let mut left = 0i32;
222+
let mut right = *ribbons.iter().max().unwrap();
223+
while left < right {
224+
let mid = (left + right + 1) / 2;
225+
let mut cnt = 0i32;
226+
for &entry in ribbons.iter() {
227+
cnt += entry / mid;
228+
if cnt >= k {
229+
break;
230+
}
231+
}
232+
if cnt >= k {
233+
left = mid;
234+
} else {
235+
right = mid - 1;
236+
}
237+
}
238+
return left;
239+
}
240+
}
241+
```
242+
216243
### **...**
217244

218245
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
impl Solution {
2+
fn max_length(ribbons: Vec<i32>, k: i32) -> i32 {
3+
let mut left = 0i32;
4+
let mut right = *ribbons.iter().max().unwrap();
5+
while left < right {
6+
let mid = (left + right + 1) / 2;
7+
let mut cnt = 0i32;
8+
for &entry in ribbons.iter() {
9+
cnt += entry / mid;
10+
if cnt >= k {
11+
break;
12+
}
13+
}
14+
if cnt >= k {
15+
left = mid;
16+
} else {
17+
right = mid - 1;
18+
}
19+
}
20+
return left;
21+
}
22+
}

0 commit comments

Comments
 (0)