前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode刷题DAY 31:最佳观光组

LeetCode刷题DAY 31:最佳观光组

作者头像
三猫
发布2020-06-22 10:38:21
3110
发布2020-06-22 10:38:21
举报

难度:中等 关键词:数组

⭐️⭐️⭐️

1 题目描述

给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,两个景点 i 和 j 之间的距离为 j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j),即景点的评分之和减去它们两者之间的距离。返回一组观光景点中能取得的最高分。如:输入[8,1,5,2,6],返回11(i=0,j=2)。

2 题解

思路:数组变换

这道题可以用遍历、双指针、动态规划的方法求解,但看网友的分享后,发现一个最为奇妙的方法:A[i] + A[j] + i - j = (A[i] + i) + ( A[j] - j ),因此对于A[j] - j ,只需找到最大的A[i] + i即可,此处i<j。这里设置两个变量,每次遍历时,ans记录当前最大得分,max_value记录最大的A[i] + i。

代码语言:javascript
复制
class Solution:
    def maxScoreSightseeingPair(self, A: List[int]) -> int:
        if len(A)<2:
            return 0
        max_value = A[0]+0
        ans = 0
        for i in range(1,len(A)):
            if A[i]-i+max_value>ans:
                ans = A[i]-i+max_value
            if A[i]+i>max_value:
                max_value = A[i]+i
        return ans
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习养成记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 题目描述
  • 2 题解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档