此题关键在于:上车下车先后是固定的, 那么可以用差分法,在特定车站上车就+人数, 下车就-人数,那么计算, 如果出现 > capacity 就是false;
1.所有车站人数初始化为0;
2.遍历trips,依次维护上下车各车站人数变化;
3.遍历所有车站,累加各个车站人数,出现> > capacity 就是false,否则返回true;
class Solution(object):
def carPooling(self, trips, capacity):
"""
:type trips: List[List[int]]
:type capacity: int
:rtype: bool
"""
diff = [0]*1002
for n,i,j in trips:
diff[i]+=n
diff[j]-=n
curr = 0
for i in range(1001):
curr+=diff[i]
if capacity < curr:
return False
return True
此题关键在于:此题与上体类似,航班只上座,变化点在于起始航班上座数,所以只需要依次累加就行,所求即为各个航班总上座数。
备注:注意边界条件;
class Solution(object):
def corpFlightBookings(self, bookings, n):
"""
:type bookings: List[List[int]]
:type n: int
:rtype: List[int]
"""
diff = [0]*(n+2)
for f,l,s in bookings:
diff[f] += s
diff[l+1] -= s
ret = []
curr = 0
for i in diff[1:-1]:
curr+=i
ret.append(curr)
return ret