maximum-earnings-from-taxi-v1.py (1033B)
1 def start(e): 2 return e[0] 3 class Solution: 4 def best_from(self,current_ride_index,rides): 5 6 if current_ride_index in self.mem: 7 return self.mem[current_ride_index] 8 9 if current_ride_index >= len(rides): 10 return 0 11 12 ride = rides[current_ride_index] 13 ending = ride[1] 14 best_without = self.best_from(current_ride_index+1,rides) 15 16 n_idx = current_ride_index+1 17 for i in range(current_ride_index+1, len(rides) + 1): 18 if i >= len(rides): 19 n_idx = i 20 break 21 if rides[i][0] >= ending: 22 n_idx = i 23 break 24 25 best_with = self.best_from(n_idx, rides) 26 27 res = max(best_with + (ride[1] - ride[0]) + ride[2], best_without) 28 self.mem[current_ride_index] = res 29 return res 30 31 32 def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int: 33 rides.sort(key=start) 34 self.mem = {} 35 return self.best_from(0,rides)