https://leetcode-cn.com/problems/best-sightseeing-pair
给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j - i。
一对景点(i < j)组成的观光组合的得分为 values[i] + values[j] + i - j ,也就是景点的评分之和 减去 它们两者之间的距离。
返回一对观光景点能取得的最高分。
思路:
很明显,题中给出了最佳观光的方程:
dp[n] = max(dp[n - 1], values[i] + values[j] + i - j)
这样会使用两次for循环,复杂度为O(n2)
拆解方程,values[i] + values[j] + i - j ===> values[i] + i + values[j] - j
即 result = max(result, dp + values[j] - j)
而 dp = max(dp, values[i] + i)
var maxScoreSightseeingPair = function(values) {
let score = 0
let dp = values[0]
for(let i = 1; i < values.length; i++) {
score = Math.max(score, dp + values[i] - i)
dp = Math.max(dp, values[i] + i)
}
return score
};