. - 力扣(LeetCode)

根据题意模拟场景解题

from typing import List
 
 
class Solution:
	def latestTimeCatchTheBus(self, buses: List[int], passengers: List[int], capacity: int) -> int:
		buses.sort()
		passengers.sort()
		# 定义通过的人的时间列表
		passed = []
		for bus in buses:
			# 定义最后一班车的剩余座位
			last_bus_seat = capacity
			# 模拟上车
			while last_bus_seat > 0 and len(passed) < len(passengers) and passengers[len(passed)] <= bus:
				# 人员上车
				passed.append(passengers[len(passed)])
				last_bus_seat -= 1
		# 当最后一班车的剩余座位大于0,且车上没人或者车上的人的最大时间小于最后一班车的发车时间,我们只要和最后一班车相同的时间去就行了
		if last_bus_seat > 0 and (not passed or passed[-1] < buses[-1]):
			return buses[-1]
 
		# 找到比最后一个上车时间小且不与其他人重复的时间即可
		for i in range(len(passed) - 1, -1, -1):
			if passed[i] - 1 > passed[i - 1]:
				return passed[i] - 1
 
		# 要是都没有,只能最早一个去了
		return passed[0] - 1