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