2332. The Latest Time to Catch a Bus
T: O((m+n) + mlogm + nlogn)
S: O(1)
```java
class Solution {
public int latestTimeCatchTheBus(int[] buses, int[] passengers, int capacity) {
Arrays.sort(buses);
Arrays.sort(passengers);
int m = buses.length;
int n = passengers.length;
int j = 0;
int result = 0;
for (int i = 0; i < m; i++) {
int cap = capacity;
while (j < n && passengers[j] <= buses[i] && cap > 0) { // 狀況1: 車子會滿
if (j == 0 || j >= 1 && passengers[j-1] != passengers[j]-1 ) { // p[0](j是第一位乘客), 那一定可以擠他前面 passengers[i] >=2, 1可以擠
// 其他就是檢驗 目前乘客的前一個時間, 是不是可以擠上去 (不行也不用更新啦...)
result = passengers[j]-1;
}
cap--;
j++;
}
if (cap > 0) { // 狀況2: 這班車沒滿, 所以如果發車時間 buses[i] 沒有乘客, 那就可以佔位
if (j == 0 || j >= 1 && passengers[j-1] != buses[i] ) {
// 一樣確定有沒有佔位(buses[i]發車的時間, p[j-1]是不是佔位); 另一種狀況 p[0](如果j是第一位乘客) 無論如何都是ok的
// 另一種狀況 p[0](如果j是第一位乘客) -> 只會發生在這班車完全沒乘客, 所以 j還在0
result = buses[i];
}
}
}
return result; // 所以其實 case 1, case2 我們都考慮去更新, 因為 case2能更新的話一定比較大, 所以兩者都判斷且更新是沒問題的
}
}
/***
T: O((m+n) + mlogm + nlogn)
S: O(1)
sort 後
雙指針
看bus 時間
看passager 時間
2 cases:
1. cap is full... so we try to find , is there a empty before passager
if all passenger can go to the bus, cap > 0
2. just take bus time (bus[i]) is the latest
10 20
2. 17 18 19
x x
10 20
1 11
*/
```
Last updated