3169. 无需开会的工作日
This commit is contained in:
parent
8468f55e0e
commit
473f02c269
84
src/main.rs
84
src/main.rs
|
@ -2,81 +2,27 @@ use std::cmp::max;
|
||||||
|
|
||||||
struct Solution;
|
struct Solution;
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn max_free_time(event_time: i32, start_time: Vec<i32>, end_time: Vec<i32>) -> i32 {
|
pub fn count_days(mut days: i32, mut meetings: Vec<Vec<i32>>) -> i32 {
|
||||||
let mut first_selection = 0;
|
meetings.sort_by(|a, b| a[0].cmp(&b[0]));
|
||||||
let mut second_selection = 0;
|
let mut ans = 0;
|
||||||
let mut third_selection = 0;
|
let mut last_end = 1;
|
||||||
|
for c in meetings.iter() {
|
||||||
if end_time[end_time.len() - 1] < event_time {
|
if last_end >= c[0] {
|
||||||
first_selection = event_time - end_time[end_time.len() - 1];
|
last_end = max(last_end, c[1] + 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ans += c[0] - last_end;
|
||||||
|
last_end = c[1] + 1;
|
||||||
}
|
}
|
||||||
let mut last_time = 0;
|
days += 1;
|
||||||
for i in 0..start_time.len() {
|
if days > last_end {
|
||||||
if start_time[i] > last_time {
|
ans += days - last_end;
|
||||||
let val = start_time[i] - last_time;
|
|
||||||
if val > first_selection {
|
|
||||||
third_selection = second_selection;
|
|
||||||
second_selection = first_selection;
|
|
||||||
first_selection = val;
|
|
||||||
} else if val > second_selection {
|
|
||||||
third_selection = second_selection;
|
|
||||||
second_selection = val;
|
|
||||||
} else if val > third_selection {
|
|
||||||
third_selection = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
last_time = end_time[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
let check_can_add = |left_space: i32, right_space: i32, needed: i32| -> bool {
|
|
||||||
if needed <= third_selection {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if needed <= second_selection {
|
|
||||||
if left_space == second_selection && right_space == first_selection ||
|
|
||||||
left_space == first_selection && right_space == second_selection {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if needed <= first_selection {
|
|
||||||
if left_space != first_selection && right_space != first_selection {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
last_time = end_time[0];
|
|
||||||
let mut last = start_time[0];
|
|
||||||
let mut ans = start_time[0];
|
|
||||||
for i in 1..start_time.len() {
|
|
||||||
let left_space = last;
|
|
||||||
let right_space = start_time[i] - last_time;
|
|
||||||
let new_val = if check_can_add(left_space, right_space, end_time[i - 1] - start_time[i - 1]) {
|
|
||||||
left_space + right_space + end_time[i - 1] - start_time[i - 1]
|
|
||||||
} else {
|
|
||||||
left_space + right_space
|
|
||||||
};
|
|
||||||
ans = max(ans, new_val);
|
|
||||||
last = right_space;
|
|
||||||
last_time = end_time[i];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
let left_space = last;
|
|
||||||
let right_space = event_time - last_time;
|
|
||||||
let new_val = if check_can_add(left_space, right_space, end_time[end_time.len() - 1] - start_time[end_time.len() - 1]) {
|
|
||||||
left_space + right_space + end_time[end_time.len() - 1]
|
|
||||||
- start_time[end_time.len() - 1]
|
|
||||||
} else {
|
|
||||||
left_space + right_space
|
|
||||||
};
|
|
||||||
ans = max(ans, new_val);
|
|
||||||
}
|
}
|
||||||
ans
|
ans
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let sl = Solution::max_free_time(5, vec![1, 3], vec![2, 5]);
|
let sl = Solution::count_days(10, vec![vec![5, 7], vec![1, 3], vec![9, 10]]);
|
||||||
println!("{}", sl);
|
println!("{}", sl);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue