Skip to content

Commit 7198831

Browse files
committed
feat: add solutions to lc problem: No.2332
No.2332.The Latest Time to Catch a Bus
1 parent 899005e commit 7198831

File tree

6 files changed

+251
-2
lines changed

6 files changed

+251
-2
lines changed

solution/2300-2399/2332.The Latest Time to Catch a Bus/README.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,115 @@
5454

5555
<!-- 这里可写通用的实现逻辑 -->
5656

57+
**方法一:模拟**
58+
59+
先排序,然后用双指针模拟乘客上车的过程:遍历公交车 $bus$,乘客遵循“先到先上车”的原则。
60+
61+
模拟结束后,判断最后一班公交车是否还有空位:
62+
63+
- 若有空位,我们可以在公交车发车时 $bus[bus.length-1]$ 到达公交站;若此时有人,可以顺着往前找到没人到达的时刻;
64+
- 若无空位,我们可以找到上一个上车的乘客,顺着他往前找到没人到达的时刻。
65+
66+
时间复杂度 $O(nlogn+mlogm)$。
67+
5768
<!-- tabs:start -->
5869

5970
### **Python3**
6071

6172
<!-- 这里可写当前语言的特殊实现逻辑 -->
6273

6374
```python
64-
75+
class Solution:
76+
def latestTimeCatchTheBus(self, buses: List[int], passengers: List[int], capacity: int) -> int:
77+
buses.sort()
78+
passengers.sort()
79+
j = 0
80+
for t in buses:
81+
c = capacity
82+
while c and j < len(passengers) and passengers[j] <= t:
83+
c, j = c - 1, j + 1
84+
j -= 1
85+
ans = buses[-1] if c else passengers[j]
86+
while ~j and passengers[j] == ans:
87+
ans, j = ans - 1, j - 1
88+
return ans
6589
```
6690

6791
### **Java**
6892

6993
<!-- 这里可写当前语言的特殊实现逻辑 -->
7094

7195
```java
96+
class Solution {
97+
public int latestTimeCatchTheBus(int[] buses, int[] passengers, int capacity) {
98+
Arrays.sort(buses);
99+
Arrays.sort(passengers);
100+
int j = 0, c = 0;
101+
for (int t : buses) {
102+
c = capacity;
103+
while (c > 0 && j < passengers.length && passengers[j] <= t) {
104+
--c;
105+
++j;
106+
}
107+
}
108+
--j;
109+
int ans = c > 0 ? buses[buses.length - 1] : passengers[j];
110+
while (j >= 0 && ans == passengers[j]) {
111+
--ans;
112+
--j;
113+
}
114+
return ans;
115+
}
116+
}
117+
```
118+
119+
### **C++**
120+
121+
```cpp
122+
class Solution {
123+
public:
124+
int latestTimeCatchTheBus(vector<int>& buses, vector<int>& passengers, int capacity) {
125+
sort(buses.begin(), buses.end());
126+
sort(passengers.begin(), passengers.end());
127+
int j = 0, c = 0;
128+
for (int t : buses)
129+
{
130+
c = capacity;
131+
while (c && j < passengers.size() && passengers[j] <= t) --c, ++j;
132+
}
133+
--j;
134+
int ans = c ? buses[buses.size() - 1] : passengers[j];
135+
while (~j && ans == passengers[j]) --j, --ans;
136+
return ans;
137+
}
138+
};
139+
```
72140
141+
### **Go**
142+
143+
```go
144+
func latestTimeCatchTheBus(buses []int, passengers []int, capacity int) int {
145+
sort.Ints(buses)
146+
sort.Ints(passengers)
147+
j, c := 0, 0
148+
for _, t := range buses {
149+
c = capacity
150+
for c > 0 && j < len(passengers) && passengers[j] <= t {
151+
j++
152+
c--
153+
}
154+
}
155+
j--
156+
ans := buses[len(buses)-1]
157+
if c == 0 {
158+
ans = passengers[j]
159+
}
160+
for j >= 0 && ans == passengers[j] {
161+
ans--
162+
j--
163+
}
164+
return ans
165+
}
73166
```
74167

75168
### **TypeScript**

solution/2300-2399/2332.The Latest Time to Catch a Bus/README_EN.md

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,95 @@ The 3<sup>rd</sup> bus departs with the 1<sup>s</sup><sup>t</sup> passenger and
5555
### **Python3**
5656

5757
```python
58-
58+
class Solution:
59+
def latestTimeCatchTheBus(self, buses: List[int], passengers: List[int], capacity: int) -> int:
60+
buses.sort()
61+
passengers.sort()
62+
j = 0
63+
for t in buses:
64+
c = capacity
65+
while c and j < len(passengers) and passengers[j] <= t:
66+
c, j = c - 1, j + 1
67+
j -= 1
68+
ans = buses[-1] if c else passengers[j]
69+
while ~j and passengers[j] == ans:
70+
ans, j = ans - 1, j - 1
71+
return ans
5972
```
6073

6174
### **Java**
6275

6376
```java
77+
class Solution {
78+
public int latestTimeCatchTheBus(int[] buses, int[] passengers, int capacity) {
79+
Arrays.sort(buses);
80+
Arrays.sort(passengers);
81+
int j = 0, c = 0;
82+
for (int t : buses) {
83+
c = capacity;
84+
while (c > 0 && j < passengers.length && passengers[j] <= t) {
85+
--c;
86+
++j;
87+
}
88+
}
89+
--j;
90+
int ans = c > 0 ? buses[buses.length - 1] : passengers[j];
91+
while (j >= 0 && ans == passengers[j]) {
92+
--ans;
93+
--j;
94+
}
95+
return ans;
96+
}
97+
}
98+
```
99+
100+
### **C++**
101+
102+
```cpp
103+
class Solution {
104+
public:
105+
int latestTimeCatchTheBus(vector<int>& buses, vector<int>& passengers, int capacity) {
106+
sort(buses.begin(), buses.end());
107+
sort(passengers.begin(), passengers.end());
108+
int j = 0, c = 0;
109+
for (int t : buses)
110+
{
111+
c = capacity;
112+
while (c && j < passengers.size() && passengers[j] <= t) --c, ++j;
113+
}
114+
--j;
115+
int ans = c ? buses[buses.size() - 1] : passengers[j];
116+
while (~j && ans == passengers[j]) --j, --ans;
117+
return ans;
118+
}
119+
};
120+
```
64121
122+
### **Go**
123+
124+
```go
125+
func latestTimeCatchTheBus(buses []int, passengers []int, capacity int) int {
126+
sort.Ints(buses)
127+
sort.Ints(passengers)
128+
j, c := 0, 0
129+
for _, t := range buses {
130+
c = capacity
131+
for c > 0 && j < len(passengers) && passengers[j] <= t {
132+
j++
133+
c--
134+
}
135+
}
136+
j--
137+
ans := buses[len(buses)-1]
138+
if c == 0 {
139+
ans = passengers[j]
140+
}
141+
for j >= 0 && ans == passengers[j] {
142+
ans--
143+
j--
144+
}
145+
return ans
146+
}
65147
```
66148

67149
### **TypeScript**
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
int latestTimeCatchTheBus(vector<int>& buses, vector<int>& passengers, int capacity) {
4+
sort(buses.begin(), buses.end());
5+
sort(passengers.begin(), passengers.end());
6+
int j = 0, c = 0;
7+
for (int t : buses)
8+
{
9+
c = capacity;
10+
while (c && j < passengers.size() && passengers[j] <= t) --c, ++j;
11+
}
12+
--j;
13+
int ans = c ? buses[buses.size() - 1] : passengers[j];
14+
while (~j && ans == passengers[j]) --j, --ans;
15+
return ans;
16+
}
17+
};
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
func latestTimeCatchTheBus(buses []int, passengers []int, capacity int) int {
2+
sort.Ints(buses)
3+
sort.Ints(passengers)
4+
j, c := 0, 0
5+
for _, t := range buses {
6+
c = capacity
7+
for c > 0 && j < len(passengers) && passengers[j] <= t {
8+
j++
9+
c--
10+
}
11+
}
12+
j--
13+
ans := buses[len(buses)-1]
14+
if c == 0 {
15+
ans = passengers[j]
16+
}
17+
for j >= 0 && ans == passengers[j] {
18+
ans--
19+
j--
20+
}
21+
return ans
22+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public int latestTimeCatchTheBus(int[] buses, int[] passengers, int capacity) {
3+
Arrays.sort(buses);
4+
Arrays.sort(passengers);
5+
int j = 0, c = 0;
6+
for (int t : buses) {
7+
c = capacity;
8+
while (c > 0 && j < passengers.length && passengers[j] <= t) {
9+
--c;
10+
++j;
11+
}
12+
}
13+
--j;
14+
int ans = c > 0 ? buses[buses.length - 1] : passengers[j];
15+
while (j >= 0 && ans == passengers[j]) {
16+
--ans;
17+
--j;
18+
}
19+
return ans;
20+
}
21+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def latestTimeCatchTheBus(self, buses: List[int], passengers: List[int], capacity: int) -> int:
3+
buses.sort()
4+
passengers.sort()
5+
j = 0
6+
for t in buses:
7+
c = capacity
8+
while c and j < len(passengers) and passengers[j] <= t:
9+
c, j = c - 1, j + 1
10+
j -= 1
11+
ans = buses[-1] if c else passengers[j]
12+
while ~j and passengers[j] == ans:
13+
ans, j = ans - 1, j - 1
14+
return ans

0 commit comments

Comments
 (0)