LeetCode每日一题(1014. Best Sightseeing Pair)

You are given an integer array values where values[i] represents the value of the ith sightseeing spot. Two sightseeing spots i and j have a distance j - i between them.

The score of a pair (i < j) of sightseeing spots is values[i] + values[j] + i - j: the sum of the values of the sightseeing spots, minus the distance between them.

Return the maximum score of a pair of sightseeing spots.

Example 1:

Input: values = [8,1,5,2,6]
Output: 11

Explanation: i = 0, j = 2, values[i] + values[j] + i - j = 8 + 5 + 0 - 2 = 11

Example 2:

Input: values = [1,2]
Output: 2

Constraints:

  • 2 <= values.length <= 5 * 104
  • 1 <= values[i] <= 1000

从右往左遍历, 一旦发现最大值, 伴随着每一步,最大值-1, 因为一旦有新的最大值加入进来, 旧的最大值就永远都不会再变为最大值, 所以我们只需要维护一个变量来保存当前的最大值即可



impl Solution {
    pub fn max_score_sightseeing_pair(values: Vec<i32>) -> i32 {
        let mut ans = 0;
        let mut max = 0;
        for v in values.into_iter().rev() {
            if max != 0 {
                max -= 1;
                ans = ans.max(v + max);
                max = max.max(v);
                continue;
            }
            max = max.max(v);
        }
        ans
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值