Minimum Number of Days to Make m Bouquets LeetCode solution in Rust

1
impl Solution {
2
pub fn min_days(bloom_day: Vec<i32>, m: i32, k: i32) -> i32 {
3
let val = m as i64 * k as i64;
4
let len = bloom_day.len() as i64;
5

6
if val > len {
7
return -1;
8
}
9

10
let (mut start, mut end) = Solution::min_max(&bloom_day);
11

12
while start <= end {
13
let mid = (start + end) / 2;
14
if Solution::is_possible(&bloom_day, mid, m, k) {
15
end = mid - 1;
16
} else {
17
start = mid + 1;
18
}
19
}
20

21
return start;
22
}
23

24
fn min_max(bloom_day: &Vec<i32>) -> (i32, i32) {
25
let (mut min, mut max) = (i32::MAX, 0);
26

27
for num in bloom_day {
28
if *num < min {
29
min = *num;
30
}
31

32
if *num > max {
33
max = *num;
34
}
35
}
36

37
return (min, max);
38
}
39

40
fn is_possible(bloom_day: &Vec<i32>, day: i32, m: i32, k: i32) -> bool {
41
let (mut count, mut no_of_bouquets) = (0, 0);
42
for num in bloom_day {
43
if *num <= day {
44
count += 1;
45
} else {
46
no_of_bouquets += (count / k) as i32;
47
count = 0;
48
}
49
}
50

51
no_of_bouquets += (count / k) as i32;
52

53
if no_of_bouquets >= m {
54
return true;
55
}
56

57
return false;
58
}
59
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0