Skip to content

Commit f3903dd

Browse files
authored
Create the-latest-time-to-catch-a-bus.cpp
1 parent cd5a852 commit f3903dd

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Time: O(nlogn + mlogm)
2+
// Space: O(1)
3+
4+
// sort, two pointers
5+
class Solution {
6+
public:
7+
int latestTimeCatchTheBus(vector<int>& buses, vector<int>& passengers, int capacity) {
8+
sort(begin(buses), end(buses));
9+
sort(begin(passengers), end(passengers));
10+
int cnt = 0, j = 0;
11+
for (int i = 0; i < size(buses) - 1; ++i) {
12+
while (j < size(passengers) && passengers[j] <= buses[i]) {
13+
++cnt;
14+
++j;
15+
}
16+
cnt = max(cnt-capacity, 0);
17+
}
18+
j -= max(cnt - capacity, 0);
19+
cnt = min(cnt, capacity);
20+
while (j < size(passengers) && passengers[j] <= buses.back() && cnt + 1 <= capacity) {
21+
++cnt;
22+
++j;
23+
}
24+
if (cnt < capacity && (j - 1 < 0 || passengers[j - 1] != buses.back())) {
25+
return buses.back();
26+
}
27+
--j;
28+
for (; j; --j) {
29+
if (passengers[j] - 1 != passengers[j - 1]) {
30+
break;
31+
}
32+
}
33+
return passengers[j] - 1;
34+
}
35+
};

0 commit comments

Comments
 (0)