leetcode 1014 最佳觀光組合

2021-10-07 07:18:56 字數 770 閱讀 6193

給定正整數陣列 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

思路:

首先進行常規思路n^2時間複雜度的列舉,但是無法通過全部測試用例,考慮對演算法進行優化,回過頭來看計算式子,a[i]+i 和a[j]-j在每個位置的值都是固定的,因此,對於每個位置j的可能得分最大值就是,當前的a[j]-j加上當前位置之前的最大的a[i]+i,而在遍歷的過程中可以維護乙個變數用來儲存最大的a[i]+i。

換個話來說,對於每個位置,只考慮他和他之前的景點的組合,那麼最大值就是找到在這之前最大的a[i]+i,而之所以不需要考慮之後的組合,因為在遍歷過這個點之後,後面的每個位置都會考慮與這個點的組合,考慮的過程涵蓋在了這個點求出a[i]+i並與當前維護的最大值作比較裡面了。

class

solution

return ret;}}

;

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...

leetcode 1014 最佳觀光組合

package com.example.lettcode.dailyexercises class scoresightseeingpair description 1014 最佳觀光組合 給定正整數陣列 a,a i 表示第 i 個觀光景點的評分,並且兩個景點 i 和 j 之間的距離為 j i。一對...