20240918 finished.
This commit is contained in:
parent
7716ee0d00
commit
0a79140c71
|
@ -239,3 +239,4 @@ mod p2390_removing_stars_from_a_string;
|
|||
mod p2848_points_that_intersect_with_cars;
|
||||
mod p1184_distance_between_bus_stops;
|
||||
mod p815_bus_routes;
|
||||
mod p2332_the_latest_time_to_catch_a_bus;
|
96
src/problem/p2332_the_latest_time_to_catch_a_bus.rs
Normal file
96
src/problem/p2332_the_latest_time_to_catch_a_bus.rs
Normal file
|
@ -0,0 +1,96 @@
|
|||
/**
|
||||
* [2332] The Latest Time to Catch a Bus
|
||||
*/
|
||||
pub struct Solution {}
|
||||
|
||||
|
||||
// submission codes start here
|
||||
|
||||
impl Solution {
|
||||
pub fn latest_time_catch_the_bus(buses: Vec<i32>, passengers: Vec<i32>, capacity: i32) -> i32 {
|
||||
let (mut buses, mut passengers) = (buses, passengers);
|
||||
buses.sort();
|
||||
passengers.sort();
|
||||
let (n, m) = (buses.len(), passengers.len());
|
||||
|
||||
let mut last_passenger = 0;
|
||||
let mut now_passengers = 0;
|
||||
let mut last_passengers = 0;
|
||||
|
||||
// 找到最后一位上车的乘客和当前车上人员的数量
|
||||
for &bus in buses.iter() {
|
||||
while last_passenger < m && passengers[last_passenger] <= bus {
|
||||
now_passengers += 1;
|
||||
last_passenger += 1;
|
||||
|
||||
if now_passengers == capacity {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 无论坐没坐满都要发车
|
||||
last_passengers = now_passengers;
|
||||
now_passengers = 0;
|
||||
}
|
||||
|
||||
// 最后一个上车的哥们
|
||||
let mut down_passenger = if last_passenger == 0 {
|
||||
// 特判一下如果没有哥们可以上车的情况
|
||||
return buses[n - 1]
|
||||
} else {
|
||||
last_passenger - 1
|
||||
};
|
||||
|
||||
let mut result = if last_passengers < capacity {
|
||||
// 最后一辆车上还有空位
|
||||
// 直接在最后一辆车来之前上车
|
||||
// 他妈的这里也要考虑重复到达的问题
|
||||
buses[n - 1]
|
||||
} else {
|
||||
// 如果最后一辆车也上满了
|
||||
// 那么就把最后一个上车的哥们挤下去
|
||||
let mut result = passengers[down_passenger] - 1;
|
||||
|
||||
// 在这种情况下,考虑重复时需要考虑那个哥们已经被挤下去了
|
||||
if down_passenger == 0 {
|
||||
return result;
|
||||
}
|
||||
|
||||
down_passenger -= 1;
|
||||
|
||||
result
|
||||
};
|
||||
|
||||
|
||||
loop {
|
||||
if result != passengers[down_passenger] {
|
||||
break;
|
||||
}
|
||||
|
||||
result -= 1;
|
||||
if down_passenger == 0 {
|
||||
break;
|
||||
}
|
||||
down_passenger -= 1;
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
// submission codes end
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_2332() {
|
||||
assert_eq!(16, Solution::latest_time_catch_the_bus(vec![10, 20], vec![2, 17, 18, 19], 2));
|
||||
assert_eq!(20, Solution::latest_time_catch_the_bus(vec![20, 30, 10], vec![19, 13, 26, 4, 25, 11, 21], 2));
|
||||
assert_eq!(1, Solution::latest_time_catch_the_bus(vec![3], vec![2,3], 2));
|
||||
assert_eq!(1, Solution::latest_time_catch_the_bus(vec![2], vec![2], 1));
|
||||
assert_eq!(1, Solution::latest_time_catch_the_bus(vec![2], vec![2], 2));
|
||||
assert_eq!(3, Solution::latest_time_catch_the_bus(vec![3], vec![4], 1));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user