1014. Best Sightseeing Pair

在这里插入图片描述

自己思路是从:最大盛水的容器那个思路,到单调栈的思路,再到认识到我们只需要记录一个最好的点就可以了。

class Solution {
public:
    int maxScoreSightseeingPair(vector<int>& A) {
        int maxScore = 0;
        int index = 0;
        for (int i = 1; i < A.size(); ++i) {
            maxScore = max(maxScore, A[i] + A[index] - (i - index));
            if (A[index] - A[i] < i - index)
                index = i;
        }
        return maxScore;
    }
};

就是记录一个最好的点,每次迭代,如果它和当前值的差值大于它们位置之间的差值的话,那么就使用当前位置来替换。

另外还有一个更加骚的写法:

class Solution {
public:
    int maxScoreSightseeingPair(vector<int>& A) {
        int cur = 0, res = 0;
        for (int num : A) {
            res = max(res, num + cur);
            cur = max(cur, num) - 1;
        }
        return res;
    }
};

可以这样想:cur每过一个便流逝一个值,所以每次都减1。所以cur的意义是:之前最好的值流逝到这个位置还剩下的值。
确实不太好理解,还是我的好:)

posted @ 2019-10-04 21:52  于老师的父亲王老爷子  阅读(12)  评论(0)    收藏  举报