前言:一开始遇到这个题目的时候没啥思路,但是当我看到值域在1000的时候我想着直接暴力从右边枚举不就行了吗,时间复杂度刚刚好,试一下就过了
正解应该是啥呢,其实也是维护一遍,运行另外一边 O ( n ) O(n) O(n)的复杂度
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& values) {
int ans = 0, mx = values[0]; // mx 表示 j 左边的 values[i] + i 的最大值
for (int j = 1; j < values.size(); j++) {
ans = max(ans, mx + values[j] - j);
mx = max(mx, values[j] + j);
}
return ans;
}
};