class Solution {
long[] memo;
public long maxTaxiEarnings(int n, int[][] rides) {
Arrays.sort(rides,(a,b)->a[1]-b[1]);
memo = new long[n + 1];
Arrays.fill(memo,-1);
return dfs(n,rides);
}
public long dfs(int n, int[][] rides){
if(n == 1){
return 0;
}
if(memo[n] != -1) return memo[n];
long res = dfs(n - 1,rides);
int left = lefter(0,rides.length - 1,rides,n);
int right = righter(left,rides,n);
for(int i = left;i < right;i++){
if(rides[i][1] == n){
res = Math.max(res,dfs(rides[i][0],rides) + rides[i][1] - rides[i][0] + rides[i][2]);
}
}
return memo[n] = res;
}
public int lefter(int i,int j,int[][] rides,int n){
int index = 0;
while(i <= j){
int mid = (i + j + 1) / 2;
if(rides[mid][1] >=n ){
index = mid;
j = mid - 1;
}else{
i = mid + 1;
}
}
return index;
}
public int righter(int mid,int[][] rides,int n){
int temp = mid;
for(int i = mid; i< rides.length;i++){
if(rides[i][1] == n){
temp++;
}else{
break;
}
}
return temp++;
}
}
2008. 出租车的最大盈利(java)
最新推荐文章于 2024-07-14 14:59:27 发布