classSolution: deflatestTimeCatchTheBus(self, buses: List[int], passengers: List[int], capacity: int) -> int: buses.sort() passengers.sort() j = 0 for t in buses: c = capacity while c and j < len(passengers) and passengers[j] <= t: c -= 1 j += 1 j -= 1 ans = buses[-1] if c else passengers[j] # 在发车时到达公交站 or 上一个上车的乘客 while j >= 0and passengers[j] == ans: # 往前找没人到达的时刻 ans -= 1 j -= 1 return ans
[sol1-Java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14
classSolution { publicintlatestTimeCatchTheBus(int[] buses, int[] passengers, int capacity) { Arrays.sort(buses); Arrays.sort(passengers); intj=0, c = 0; for (var t : buses) for (c = capacity; c > 0 && j < passengers.length && passengers[j] <= t; --c) ++j; --j; varans= c > 0 ? buses[buses.length - 1] : passengers[j]; // 在发车时到达公交站 or 上一个上车的乘客 while (j >= 0 && passengers[j--] == ans) --ans; // 往前找没人到达的时刻 return ans; } }
[sol1-C++]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution { public: intlatestTimeCatchTheBus(vector<int> &buses, vector<int> &passengers, int capacity){ sort(buses.begin(), buses.end()); sort(passengers.begin(), passengers.end()); int j = 0, c; for (int t : buses) for (c = capacity; c && j < passengers.size() && passengers[j] <= t; --c) ++j; --j; int ans = c ? buses.back() : passengers[j]; // 在发车时到达公交站 or 上一个上车的乘客 while (j >= 0 && passengers[j--] == ans) --ans; // 往前找没人到达的时刻 return ans; } };
[sol1-Go]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
funclatestTimeCatchTheBus(buses, passengers []int, capacity int) (ans int) { sort.Ints(buses) sort.Ints(passengers) j, c := 0, 0 for _, t := range buses { for c = capacity; c > 0 && j < len(passengers) && passengers[j] <= t; c-- { j++ } } if c > 0 { ans = buses[len(buses)-1] // 最后一班公交还有空位,在它发车时到达 } else { ans = passengers[j-1] // 上一个上车的乘客 } for j--; j >= 0 && passengers[j] == ans; j-- { // 往前找没人到达的时刻 ans-- } return }