1、一开始考虑两个for循环解决,不出意料,超时
2、后来想着建立一个类,标明序号值,但是还是和原来差不多
变换公式A[i]+i+A[j]-j
3、看题解,很简单,用两个值,一个保存A[i]+i到目前为止的最大值。一个保存A[i]+i+A[j]-j到目前的最大值
4、一个for循环不断向前推进,两个最大值相加即可
5、该方法用于解决一个元素与其右边元素相加的最大值
代码:
package com.LeetCode1.Array;
import java.util.Arrays;
public class leet1014 {
/**
* 修改1:超时
* @param args
*/
public static void main(String[] args) {
int[] A = {8,1,5,2,6};
System.out.println(maxScoreSightseeingPair(A));
}
public static int maxScoreSightseeingPair(int[] A) {
int n=A.length;
int premax = A[0]+0;
int max=0;
for(int i=1;i<n;i++)
{
max = Math.max(max, premax+A[i]-i);
premax = Math.max(premax, A[i]+i);
}
return max;
}
}