Skip to content

Commit c0634c1

Browse files
authored
Update Solution.rs
1 parent f33c9ef commit c0634c1

File tree

1 file changed

+20
-22
lines changed
  • solution/1800-1899/1870.Minimum Speed to Arrive on Time

1 file changed

+20
-22
lines changed
Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,31 @@
11
impl Solution {
22
pub fn min_speed_on_time(dist: Vec<i32>, hour: f64) -> i32 {
3+
if dist.len() as f64 > hour.ceil() {
4+
return -1;
5+
}
6+
const M: i32 = 10_000_000;
7+
let (mut l, mut r) = (1, M + 1);
38
let n = dist.len();
4-
5-
let check = |speed| {
6-
let mut cur = 0.0;
7-
for (i, &d) in dist.iter().enumerate() {
8-
if i == n - 1 {
9-
cur += (d as f64) / (speed as f64);
10-
} else {
11-
cur += ((d as f64) / (speed as f64)).ceil();
12-
}
9+
let check = |v: i32| -> bool {
10+
let mut s = 0.0;
11+
for i in 0..n {
12+
let t = dist[i] as f64 / v as f64;
13+
s += if i == n - 1 { t } else { t.ceil() };
1314
}
14-
cur <= hour
15+
s <= hour
1516
};
16-
17-
let mut left = 1;
18-
let mut right = 1e7 as i32;
19-
while left < right {
20-
let mid = left + (right - left) / 2;
21-
if !check(mid) {
22-
left = mid + 1;
17+
while l < r {
18+
let mid = (l + r) / 2;
19+
if check(mid) {
20+
r = mid;
2321
} else {
24-
right = mid;
22+
l = mid + 1;
2523
}
2624
}
27-
28-
if check(left) {
29-
return left;
25+
if l > M {
26+
-1
27+
} else {
28+
l
3029
}
31-
-1
3230
}
3331
}

0 commit comments

Comments
 (0)