1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
   | class Solution {     List<int[]>[] group;     long[] cache;
      public long maxTaxiEarnings(int n, int[][] rides) {         cache = new long[n + 1];         Arrays.fill(cache, -1);         group = new List[n + 1];         for (int[] r : rides) {             int start = r[0], end = r[1], tip = r[2];             if (group[end] == null) {                 group[end] = new ArrayList<>();             }             group[end].add(new int[]{start, end - start + tip});         }         return dfs(n);     }
      private long dfs(int i) {         if (i == 1) return 0;         if (cache[i] != -1) return cache[i];                  long ans = dfs(i - 1);         if (group[i] != null) {             for (int[] r : group[i]) {                                  ans = Math.max(ans, dfs(r[0]) + r[1]);             }         }         return cache[i] = ans;     } }
  |