File tree Expand file tree Collapse file tree 1 file changed +20
-22
lines changed
solution/1800-1899/1870.Minimum Speed to Arrive on Time Expand file tree Collapse file tree 1 file changed +20
-22
lines changed Original file line number Diff line number Diff line change 1
1
impl Solution {
2
2
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 ) ;
3
8
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 ( ) } ;
13
14
}
14
- cur <= hour
15
+ s <= hour
15
16
} ;
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;
23
21
} else {
24
- right = mid;
22
+ l = mid + 1 ;
25
23
}
26
24
}
27
-
28
- if check ( left) {
29
- return left;
25
+ if l > M {
26
+ -1
27
+ } else {
28
+ l
30
29
}
31
- -1
32
30
}
33
31
}
You can’t perform that action at this time.
0 commit comments