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; } }
|