欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > LeetCode 1014. 最佳观光组合 一次遍历数组,时间复杂度O(n)

LeetCode 1014. 最佳观光组合 一次遍历数组,时间复杂度O(n)

2025/9/22 23:26:04 来源:https://blog.csdn.net/weixin_60214397/article/details/142470702  浏览:    关键词:LeetCode 1014. 最佳观光组合 一次遍历数组,时间复杂度O(n)

1014. 最佳观光组合

today 1014 最佳观光组合

题目描述

给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,评分由 1 到 10^6 之间的整数。

一对景点(A[i], A[j])的观光总得分为 A[i] + A[j] + i - j,其中 i < j。

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

示例

输入:[8,1,5,2,6]
输出:11
解释:i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5 + 0 - 2 = 11输入:[1,2,3]
输出:0
解释:没有观光景点能取得更高的分数。

提示

  • 1 <= A.length <= 50000
  • 1 <= A[i] <= 10^6

解题思路

这道题最简单的思路是枚举所有的可能的景点对,然后计算每个景点对的得分,取最大值。但是这样会导致超时。

因此我们采用动态规划的方法,从后往前遍历数组,对于每个位置 i,我们计算 i 后续的最大分数。即ans = max(ans,values[i]+rightMax)

其中 rightMax=max(values[i-1],rightMax-1)

复杂度分析:

  • 只遍历一次数组,时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

代码实现

Python版本:

class Solution(object):def maxScoreSightseeingPair(self, values):ans=0n=len(values)rightMax=values[n-1]-1for i in range(n-2,-1,-1):ans=max(ans,rightMax+values[i])rightMax=max(rightMax-1,values[i]-1)return ans

Go版本:

func maxScoreSightseeingPair(values []int) int {ans := 0n := len(values)if n == 2 {return values[0] + values[1] - 1}rightMax := values[n-1]-1for j := n - 2; j >= 0; j-- {ans = max(ans, rightMax+values[j])rightMax = max(rightMax-1, values[j]-1)}return ans
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词