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的意义是:之前最好的值流逝到这个位置还剩下的值。
确实不太好理解,还是我的好:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值