[Leedcode][JAVA][第1014题][最佳观光组合][数组][暴力优化]
生活随笔
收集整理的這篇文章主要介紹了
[Leedcode][JAVA][第1014题][最佳观光组合][数组][暴力优化]
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【問題描述】[中等]
給定正整數(shù)數(shù)組 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【解答思路】
1. 暴力 (雙重循環(huán)超時)
從前往后 兩層循環(huán)
時間復(fù)雜度:O(N^2) 空間復(fù)雜度:O(1)
2. 暴力優(yōu)化
ans = A[i]+i 和 A[j]-jA[j]?j
- 由于 A[j]-j 是固定不變的,因此最大化 A[i]+i+A[j]-j的值其實就等價于求 [0,j-1][0,j?1] 中 A[i]+i 的最大值 mx,景點 j的答案即為 mx+A[j]-j
- mx 的值我們只要從前往后枚舉 j 的時候同時維護即可
時間復(fù)雜度:O(N) 空間復(fù)雜度:O(1)
public int maxScoreSightseeingPair(int[] A) { int ans = 0, mx = A[0] + 0;for (int j = 1; j < A.length; ++j) {ans = Math.max(ans, mx + A[j] - j);// 邊遍歷邊維護 有i<j 的限制mx = Math.max(mx, A[j] + j);}return ans;}【總結(jié)】
1.暴力解決后優(yōu)化是解題重要思想
2.暴力優(yōu)化 公式變換 前綴和等思想
總結(jié)
以上是生活随笔為你收集整理的[Leedcode][JAVA][第1014题][最佳观光组合][数组][暴力优化]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R语言编程艺术(3)R语言编程基础
- 下一篇: cad指示箭头快捷键命令_47个快捷键+