leetcode 1014 最佳觀光組合

2022-06-15 15:48:07 字數 1642 閱讀 5067

package com.example.lettcode.dailyexercises;

/** * @class scoresightseeingpair

* @description 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] + a[j] + i - j = 8 + 5 + 0 - 2 = 11

* 2 <= a.length <= 50000

* 1 <= a[i] <= 1000

* @author 10256137

* @date 2020/6/17

**/public class scoresightseeingpair

/**

* 解法1:暴力求解,

*/public int maxscoresightseeingpair(int a)

int max = 0;

int len = a.length;

for (int i = 0; i < len - 2; i++)

} return max;

}

/**

* 解法二:

* 目的相當於(a[i]+i)+(a[j]-j) 獲取最大值,

* a[j]-j當遍歷到當前元素j時便可取得,

* a[i]+i相當於遍歷過程中儲存的最大結果

* 遍歷一次即可得到最終結果

*/public int maxscoresightseeingpair(int a)

int max_i = 0;

int max_j = 0;

for (int j = 0; j < a.length; j++)

return max_j;

}

/**

* 解法3:利用動態規劃

* 設 res 為最終結果,dp[i] 為位置i為第二個元素時對應的最高分

* 對於 i >= 2, dp[i]僅取決於與 a[i - 1] 的分數 和 相對於 dp[i - 1] 的景點的分數,即

* * dp[i] = max(dp[i - 1] - a[i - 1] + a[i] - 1, a[i] + a[i - 1] - 1);

*/public int maxscoresightseeingpair(int a)

int dp = new int[a.length];

dp[0] = a[0];

dp[1] = a[1] + a[0] - 1;

int max = math.max(dp[0],dp[1]);

for (int i = 2; i < a.length; i++)

return max;

}

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 最佳觀光組合

給定正整數陣列 a,a i 表示第 i 個觀光景點的評分,並且兩個景點 i 和 j 之間的距離為 j i。一對景點 i j 組成的觀光組合的得分為 a i a j i j 景點的評分之和減去它們兩者之間的距離。返回一對觀光景點能取得的最高分。示例 輸入 8,1,5,2,6 輸出 11 解釋 i 0,...