题目描述:
思路:一开始以为很简单双重循环,结果超出时间限制。。。看了下题解,将A[i]+A[j]+i-j,拆分成了A[i]+i和A[j]-j。最大化A[i]+A[j]+i-j就等价于求第i个数前A[i]+i的最大值,并且求A[j]-j加上这个最大值的最大值。
class Solution {
public int maxScoreSightseeingPair(int[] A) {
int premax=A[0];
int result=0;
for (int i = 1; i < A.length; i++) {
result=Math.max(result,premax+A[i]-i);
premax= Math.max(premax,A[i]+i);
}
return result;
}
}