Skip to content

Commit 7318cb0

Browse files
authored
feat: add rust solution to lc problem: No.2141 (#1311)
1 parent 3dcbbe0 commit 7318cb0

File tree

3 files changed

+154
-0
lines changed

3 files changed

+154
-0
lines changed

solution/2100-2199/2141.Maximum Running Time of N Computers/README.md

+53
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,59 @@
5858

5959
<!-- tabs:start -->
6060

61+
### **Rust**
62+
63+
```rust
64+
impl Solution {
65+
#[allow(dead_code)]
66+
pub fn max_run_time(n: i32, batteries: Vec<i32>) -> i64 {
67+
68+
// First sort the batteries
69+
let mut batteries = batteries;
70+
let m = batteries.len() as i32;
71+
batteries.sort();
72+
73+
let mut extra_sum: i64 = 0;
74+
for i in 0..(m - n) as usize {
75+
extra_sum += batteries[i] as i64;
76+
}
77+
78+
let mut i = (m - n) as usize;
79+
let mut cur_height = batteries[i];
80+
let mut ret = cur_height as i64;
81+
while extra_sum != 0 {
82+
if i + 1 == m as usize {
83+
assert!(cur_height == *batteries.last().unwrap());
84+
ret += extra_sum / n as i64;
85+
break;
86+
}
87+
88+
if batteries[i] == batteries[i + 1] {
89+
i += 1;
90+
continue;
91+
}
92+
93+
let diff = extra_sum / (i - (m - n) as usize + 1) as i64;
94+
95+
if (cur_height as i64 + diff) <= batteries[i + 1] as i64 {
96+
ret = cur_height as i64 + diff;
97+
break;
98+
} else {
99+
extra_sum -= (batteries[i + 1] - batteries[i]) as i64 * (i - (m - n) as usize + 1) as i64;
100+
ret = batteries[i + 1] as i64;
101+
}
102+
103+
i += 1;
104+
if i != m as usize {
105+
cur_height = batteries[i];
106+
}
107+
}
108+
109+
ret
110+
}
111+
}
112+
```
113+
61114
### **Python3**
62115

63116
<!-- 这里可写当前语言的特殊实现逻辑 -->

solution/2100-2199/2141.Maximum Running Time of N Computers/README_EN.md

+53
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,59 @@ We can run the two computers simultaneously for at most 2 minutes, so we return
5151

5252
<!-- tabs:start -->
5353

54+
### **Rust**
55+
56+
```rust
57+
impl Solution {
58+
#[allow(dead_code)]
59+
pub fn max_run_time(n: i32, batteries: Vec<i32>) -> i64 {
60+
61+
// First sort the batteries
62+
let mut batteries = batteries;
63+
let m = batteries.len() as i32;
64+
batteries.sort();
65+
66+
let mut extra_sum: i64 = 0;
67+
for i in 0..(m - n) as usize {
68+
extra_sum += batteries[i] as i64;
69+
}
70+
71+
let mut i = (m - n) as usize;
72+
let mut cur_height = batteries[i];
73+
let mut ret = cur_height as i64;
74+
while extra_sum != 0 {
75+
if i + 1 == m as usize {
76+
assert!(cur_height == *batteries.last().unwrap());
77+
ret += extra_sum / n as i64;
78+
break;
79+
}
80+
81+
if batteries[i] == batteries[i + 1] {
82+
i += 1;
83+
continue;
84+
}
85+
86+
let diff = extra_sum / (i - (m - n) as usize + 1) as i64;
87+
88+
if (cur_height as i64 + diff) <= batteries[i + 1] as i64 {
89+
ret = cur_height as i64 + diff;
90+
break;
91+
} else {
92+
extra_sum -= (batteries[i + 1] - batteries[i]) as i64 * (i - (m - n) as usize + 1) as i64;
93+
ret = batteries[i + 1] as i64;
94+
}
95+
96+
i += 1;
97+
if i != m as usize {
98+
cur_height = batteries[i];
99+
}
100+
}
101+
102+
ret
103+
}
104+
}
105+
```
106+
54107
### **Python3**
55108

56109
```python
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
impl Solution {
2+
#[allow(dead_code)]
3+
pub fn max_run_time(n: i32, batteries: Vec<i32>) -> i64 {
4+
5+
// First sort the batteries
6+
let mut batteries = batteries;
7+
let m = batteries.len() as i32;
8+
batteries.sort();
9+
10+
let mut extra_sum: i64 = 0;
11+
for i in 0..(m - n) as usize {
12+
extra_sum += batteries[i] as i64;
13+
}
14+
15+
let mut i = (m - n) as usize;
16+
let mut cur_height = batteries[i];
17+
let mut ret = cur_height as i64;
18+
while extra_sum != 0 {
19+
if i + 1 == m as usize {
20+
assert!(cur_height == *batteries.last().unwrap());
21+
ret += extra_sum / n as i64;
22+
break;
23+
}
24+
25+
if batteries[i] == batteries[i + 1] {
26+
i += 1;
27+
continue;
28+
}
29+
30+
let diff = extra_sum / (i - (m - n) as usize + 1) as i64;
31+
32+
if (cur_height as i64 + diff) <= batteries[i + 1] as i64 {
33+
ret = cur_height as i64 + diff;
34+
break;
35+
} else {
36+
extra_sum -= (batteries[i + 1] - batteries[i]) as i64 * (i - (m - n) as usize + 1) as i64;
37+
ret = batteries[i + 1] as i64;
38+
}
39+
40+
i += 1;
41+
if i != m as usize {
42+
cur_height = batteries[i];
43+
}
44+
}
45+
46+
ret
47+
}
48+
}

0 commit comments

Comments
 (0)