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
思路:记录在每个地点时 车上总共需有的人数,然后遍历地点人数,与空座比较
代码中有详细注释,通俗易懂,保你看明白
举例: 负数表示这点没人上车,有下车 注意这里举例有些片面,没有重合点位,但是实际会有,如果不好理解,可以先看代码,然后自己找个重合地点的进行手推,帮助理解
举例 trips = [[2,1,5],[3,3,7]], capacity = 4
peopels_index 0 1 2 3 4 5 6 7
peopels_data 0 2 0 3 0 -2 0 -3
code: 所有代码均有注释,保证一看就懂
class Solution(object):
def carPooling(self, trips, capacity):
"""
:type trips: List[List[int]]
:type capacity: int
:rtype: bool
"""
# peopel=[0 for _ in range(1001)]
peopels=[0]*1001
# 记录每个地点时车上人数 (由于初始化为0,这里就可直接按位置作为下标进行保存人数)
for num,start,end in trips:
# 上车
peopels[start]+=num
# 下车
peopels[end]-=num
# 遍历每个位置,看是否少于空座数
for i in range(len(peopels)):
# 由于位置不是连续的,为便于统计车上总人数,需要进行人数的传递
"""
举例 trips = [[2,1,5],[3,3,7]], capacity = 4
peopels_index 0 1 2 3 4 5 6 7
peopels_data 0 2 0 3 0 -2 0 -3
由于位置不连贯,故需要进行前面人数的传递
peopels[i]+=peopels[i-1] (初始化为0,不会有影响)
"""
peopels[i]+=peopels[i-1]
if peopels[i]>capacity:
return False
return True
眼过千遍,不如手敲一遍,大家共勉!!!