LeetCode 1014. 最佳觀光組合 | Python

1014. 最佳觀光組合


題目來源:力扣(LeetCode)https://leetcode-cn.com/problems/best-sightseeing-pairpython

題目


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

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

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

示例:spa

輸入:[8,1,5,2,6]
輸出:11
解釋:i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5 + 0 - 2 = 11

提示:code

  • 2 <= A.length <= 50000
  • 1 <= A[i] <= 1000

解題思路


咱們審題後發現,其實題目的答案已經在題目中有所體現。【一對景點(i < j)組成的觀光組合的得分爲(A[i] + A[j] + i - j):景點的評分之和減去它們二者之間的距離】,在這裏,咱們能夠發現套用上面的公式,遍歷比較求出最大便可。blog

那麼咱們使用暴力解的時候,代碼大體以下:索引

def maxScoreSightseeingPair(self, A: List[int]) -> int:
    length = len(A)
    max_score = 0
    for i in range(length):
        for j in range(i+1, length):
            score = A[i] + A[j] + i - j
            if score > max_score:
                max_score = score
    return max_score

可是這裏沒法經過全部的用例(執行結果:超時)。leetcode

雖然執行以後會超時,可是,這個思路的方向是沒有錯的。咱們仔細看題目中所給的公式:rem

A[i] + A[j] + i - j, (i<j)

咱們將其轉變爲:

A[i] + i + A[j] - j, (i<j)

這樣比較容易可以看出,能夠將公式拆成兩個部分 A[i] + iA[j] - j

當對數組開始遍歷時,對於 A[j] 來講,這個值是固定的,A[j] 對應的索引 j 也是固定的。因此 A[j]-j 這個值也是固定的。

如今要求 A[i] + i + A[j] - j, (i<j),對於 A[j] 而言,要使得結果最大,也就是求 A[i]+i 取得最大值的時候。

最終在全部的 A[j] 中取得最大的那個結果返回。

具體的代碼實現以下。

代碼實現


class Solution:
    def maxScoreSightseeingPair(self, A: List[int]) -> int:
        length = len(A)
        # 將公式轉變爲 A[i] + i + A[j] - j, (i<j)
        # 拆分爲 A[i] + i,A[j] - j
        # A[i] + i 初始化爲 A[0] + 0
        max_value = A[0] + 0
        ans = 0
        for j in range(1, length):
            # 維護更新最大值
            # 這裏須要注意 i < j
            ans = max(ans, max_value + A[j] - j)
            # 這裏維護更新 A[i] + i 的值,這裏等同於與 A[i-1] + (i-1) 進行比較
            # max_value 初始化爲 A[0] + 0,此時 i = j = 1
            max_value = max(max_value, A[j] + j)

        return ans

實現結果


實現結果

總結


  • 根據題意,能夠先使用暴力解嘗試解決問題。這裏雖然會超時,但能夠肯定方向是對的。
  • 將題目中所給的公式進行轉換獲得:A[i] + i + A[j] - j, (i<j),這裏須要注意 i<j
  • 對於 A[j] 而言這裏能夠固定 A[j]-j,那麼公式求最大值,也便是求 A[i]+i 最大;
  • 最終在全部的 A[j] 中挑選最大的結果返回。

文章原創,若是以爲寫得好,歡迎點贊關注。微信公衆號《書所集錄》同步更新,一樣歡迎關注點贊。
相關文章
相關標籤/搜索