题目链接: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;
}
};