Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /