前言:一开始遇到这个题目的时候没啥思路,但是当我看到值域在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;}
};