【力扣】1014:最佳觀光組合

題目描述

給定正整數數組 A,A[i] 表示第 i 個觀光景點的評分,並且兩個景點 i 和 j 之間的距離爲 j - i。

一對景點(i < j)組成的觀光組合的得分爲(A[i] + A[j] + i - j):景點的評分之和減去它們兩者之間的距離。

返回一對觀光景點能取得的最高分。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/best-sightseeing-pair
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

算法思路

暴力

        MAX=0
        for i in range(len(A)):
            for j in range(i+1,len(A)):
                MAX= max(A[i]+A[j]+i-j,MAX)
        return MAX  

這個方法最簡單,但是100%會被較大的數據量制裁

PERFECT

觀光組合的得分爲(A[i] + A[j] + i - j),可以變形成A[i]+i + A[j]-j,且i<j

所以觀光組合的得分就是這兩部分的和。
遍歷一遍數組,對每個A[j]-j都有當前最大的A[i]+i相加,然後更新最大觀光組合分數。
然後再更新一下當前最大的A[i]+i

class Solution:
    def maxScoreSightseeingPair(self, A: List[int]) -> int:
        left, res = A[0], -1
        for j in range(1, len(A)):
            res = max(res, left + A[j] - j)
            left = max(left, A[j] + j)
        return res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章