題目鏈接:https://leetcode-cn.com/problems/best-sightseeing-pair/
思路:不能採用兩重循環暴力枚舉,會超時,而應該將A[i]+A[j]+i-j拆分爲兩部分,A[i]+i,A[j]-j兩部分
(i<j)。這樣單重循環枚舉j,保留j之前的最大的A[i]+i,爲max_i_part,然後每次取max_i_part+A[j]-j當前的最大值。
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& A) {
int len=A.size();
int max_i_part=-1;
int max_result=-1;
for(int j=1;j<len;j++)
{
max_i_part=max(max_i_part,A[j-1]+j-1);
max_result=max(max_result,max_i_part+A[j]-j);
}
return max_result;
}
};