美文网首页
1014. 最佳观光组合(Python)

1014. 最佳观光组合(Python)

作者: 玖月晴 | 来源:发表于2021-05-18 10:18 被阅读0次

难度:★★★☆☆
类型:数组
方法:遍历

题目

力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录

给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j - i。

一对景点(i < j)组成的观光组合的得分为 values[i] + values[j] + i - j ,也就是景点的评分之和 减去 它们两者之间的距离。

返回一对观光景点能取得的最高分。

示例 1:

输入:values = [8,1,5,2,6]
输出:11
解释:i = 0, j = 2, values[i] + values[j] + i - j = 8 + 5 + 0 - 2 = 11

示例 2:

输入:values = [1,2]
输出:2

提示:

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

解答

我们再看一眼优化公式:A[i]+A[j]+i-j,分成两部分看,(A[i]+i)-(A[j]-j),这样就清楚了,每个位置A[i]+i和A[j]-j都是固定的,优化问题就转化为:
maximize(A[i]+i)+maximize(A[j]+j),s.t. i<j
也就是说,寻找两个位置i<j,能够使得A[i]+i和A[j]-j最大。

我们完全可以一次遍历实现查找过程。一遍遍历,一边寻找最大的A[i]+i和A[j]-j,为了满足i<j的条件,我们只对A[i]+i做缓存ai_plus_i ,每次遍历都及时更新ai_plus_i 和最终结果。

class Solution:
    def maxScoreSightseeingPair(self, A):
        res = 0
        ai_plus_i = A[0] + 0
        for j in range(1, len(A)):
            res = max(res, ai_plus_i + A[j] - j)
            ai_plus_i = max(ai_plus_i, A[j] + j)
        return res

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

相关文章

网友评论

      本文标题:1014. 最佳观光组合(Python)

      本文链接:https://www.haomeiwen.com/subject/mfqhhltx.html