1014. 最佳观光组合

难度中等124

给定正整数数组 AA[i] 表示第 i 个观光景点的评分,并且两个景点 ij 之间的距离为 j - i

一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。

返回一对观光景点能取得的最高分。

示例:

1
2
3
输入:[8,1,5,2,6]
输出:11
解释:i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5 + 0 - 2 = 11

提示:

  1. 2 <= A.length <= 50000
  2. 1 <= A[i] <= 1000

通过次数17,154

提交次数32,791

主要注意优化的这种思路,真的挺妙的;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& A) {
//A[i]+i+A[j]-j
//原始解法:
//对于每一个j 枚举1-[j-1]得到每一个j的最优解然后取最大值;O(N^2)
//优化:
//tmp=max(A[i]+i)([0,j-1]),对于每一个j,maxn=max(tmp+A[j]-j,maxn); O(n)

int tmp=A[0]+0;
int maxn=INT_MIN;
for(int i=1;i<A.size();++i){
maxn=max(tmp+A[i]-i,maxn);
tmp=max(tmp,A[i]+i);
}
return maxn;



}
};