- 按照 end 对每一个乘客进行排序
- 对于每一个乘客,如果接他就要寻找之前小于 start 的 end 中最大的那个来计算接他的收益,而不接的话就是上一个乘客的收益,取最大值即可
class Solution:
def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int:
rides.sort(key=lambda r: r[1])
m = len(rides)
dp = [0] * (m + 1)
for i in range(m):
j = bisect_right(rides, rides[i][0], hi=i, key=lambda r:r[1])
dp[i + 1] = max(dp[i], dp[j] + rides[i][1] - rides[i][0] + rides[i][2])
return dp[m]