题目描述:
题解一:超时
class Solution(object): def maxScoreSightseeingPair(self, values): nums = len(values) dp = [0 for i in range(nums)] for i in range(nums): for j in range(i+1,nums): dp[i] = max(dp[i],values[i]+values[j]+i-j) return max(dp)
题解二:
参考
values[i]+values[j]+i-j转化为values[i]+i+values[j]-j
1.left初始化为values[0],left代表的是以上公式中values[i]+i部分,因为values[i]对应的i为0,因此省略。result记录最终结果,初始化为-1。
2.从values[1]开始,计算并更新result=max(result,leftvalues[i]-i),如果values[i]+i大于left,则更新left,因为left部分越大,最终结果越大。
class Solution: def maxScoreSightseeingPair(self, values: List[int]) -> int: left = values[0] result = -1 for j in range(1,len(values)): result = max(result,values[j]+left-j) left = max(left,values[j]+j) return result