力扣 1014 最佳觀光組合

2021-10-07 06:34:52 字數 744 閱讀 7549

給定正整數陣列 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, a[i] + a[j] + i - j = 8 + 5 + 0 - 2 = 11

2 <= a.length <= 50000

1 <= a[i] <= 1000

首先,這題目一看覺得很簡單不就是暴力法嘛,雙重迴圈,時間複雜度為o(n^2)。但是這樣過不了,時間複雜度太高了。

因此,我們換另一種思路降低時間複雜度,通過貪心演算法進行優化。

我們將得分公式 a[i] + a[j] + i - j 轉換成 (a[i] + i) + (a[j] - j),那麼只需要獲得a[i] + i 和 a[j] - j 的最大值 ,i < j。

因此在遍歷 j 的時候,我們不斷更新並儲存 a[i] + i 的值就可以了。

class solution 

return res;

}}// 貪心演算法:將問題分解為 a[i] + i 和 a[j] - j 的最大值 i < j

// 那我們在一次遍歷 j 的時候只需要不斷儲存並且更新 a[i] + i 的值即可求出最大值

1014 最佳觀光組合

給定正整數陣列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,a i ...

leetcode 1014 最佳觀光組合

給定正整數陣列 a,a i 表示第 i 個觀光景點的評分,並且兩個景點 i 和 j 之間的距離為 j i。一對景點 i j 組成的觀光組合的得分為 a i a j i j 景點的評分之和減去它們兩者之間的距離。返回一對觀光景點能取得的最高分。這道題目直接的做法是遍歷每一種組合,這裡採用一種比較巧妙的...

LeetCode 1014 最佳觀光組合

第一種方法 找到每個下標元素右邊第乙個更大的元素的下標,這一步利用棧來實現。第二種方法,import sys class solution def maxscoresightseeingpair self,a list int int dic1 stack for i,val in enumerat...