当前位置: 首页 > article >正文

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=0
        n=len(values)
        rightMax=values[n-1]-1
        for 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 := 0
	n := len(values)
	if n == 2 {
		return values[0] + values[1] - 1
	}
	rightMax := values[n-1]-1
	for j := n - 2; j >= 0; j-- {
		ans = max(ans, rightMax+values[j])
		rightMax = max(rightMax-1, values[j]-1)
	}
	return ans
}

http://www.kler.cn/a/316795.html

相关文章:

  • JSON-RPC-CXX深度解析:C++中的远程调用利器
  • request爬虫库的小坑
  • 【再谈设计模式】抽象工厂模式~对象创建的统筹者
  • hadoop大数据平台
  • 开源 2 + 1 链动模式、AI 智能名片、S2B2C 商城小程序在用户留存与品牌发展中的应用研究
  • LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略
  • 【matlab】将程序打包为exe文件(matlab r2023a为例)
  • Linux文件IO(三)-Linux系统如何管理文件
  • 【基础知识】网络套接字编程
  • QT-MOC元对象系统详解
  • 【小程序】微信小程序课程 -1 安装与配置
  • 【2025】基于微信小程序的人工智能课程学习平台的设计与实现(源码+文档+解答)
  • 职业技能大赛-自动化测试笔记分享
  • while语句
  • CANdela/Diva系列8--如何生成0x27服务解锁的DLL
  • MySQL 数据库课程设计详解与操作示例
  • Java : 图书管理系统
  • ArcGIS Pro SDK (十四)地图探索 6 图形与工具
  • AIGC7: 高通骁龙AIPC开发者沙龙过程记录A
  • 力扣刷题之2398.预算内的最多机器人数目
  • Shelly实测天工的音乐创作功能,写了一首歌,来听听效果
  • 学习笔记JVM篇(四)
  • python教程修订版
  • Redis 集群策略详解
  • oracle查询历史操作记录
  • 行为型设计模式的全面解析