力扣每日一题+python知识点回顾(七)
力扣题目:拼车(题号:1094)
车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向)
给定整数 capacity 和一个数组 trips , trip[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi 。这些位置是从汽车的初始位置向东的公里数。
当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。
示例 1:
输入:trips = [[2,1,5],[3,3,7]], capacity = 4
输出:false
示例 2:
输入:trips = [[2,1,5],[3,3,7]], capacity = 5
输出:true
编程思路1:暴力法
先考虑一种暴力破解的思路:统计每个站点最多同时存在的客户数量,最终与座位数相比较,如果每个站点的客户数都小于座位数,则返回true,否则返回flase。
class Solution:
def carPooling(self, trips: List[List[int]], capacity: int) -> bool:
num = [0] * 1001
for i in range(len(trips)):
for j in range(trips[i][1],trips[i][2]):
num[j] += trips[i][0]
for i in range(len(diff)):
if num[i] > capacity:
return False
return True
时间复杂度O(n*m),空间复杂度O(m),其中n是旅行次数,m是行程数,本题中:m=1000
编程思路2:差分数组
差分数组通过统计不同站点之间的数据变化,来实现统计,适用对数组进行频繁操作的问题:针对本问题,我们在用差分数组记录不同站点之间的变化:
class Solution:
def carPooling(self, trips: List[List[int]], capacity: int) -> bool:
diff = [0] * 1001 # 差分数组
for numPassengers, from_, to in trips:
diff[from_] += numPassengers
diff[to] -= numPassengers
p = mx = 0
for x in diff:
p += x
if p > mx:
mx = p
if mx > capacity:
return False
return True
时间复杂度O(n+max(trips[i][2])),空间复杂度O(m),其中n是旅行次数,m是行程数,本题中:m=1000
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效