leetcode: 最佳观光组合(枚举优化)

给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。

一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。

返回一对观光景点能取得的最高分。

PS:

  1. 2 <= A.length <= 50000
  2. 1 <= A[i] <= 1000

题目一看,暴力解法O(n^2),那么题目肯定是要我们进行优化的

如何优化,hash、动态规划啥的都用不上,再仔细看一下题目,发现这个公式(A[i] + A[j] + i - j)是可以优化的,我们可以改成找当前A[j] - j的情况下最大的A[i] + i

class Solution:
    def maxScoreSightseeingPair(self, A: List[int]) -> int:
        # max1代表A[i] + i
        max1 = 0
        # ans代表max1 + A[j] - j的最大值
        ans = 0
        for i in range(len(A) - 1):
            max1 = max(max1, A[i] + i)
            ans = max(ans, max1 + A[i + 1] - i - 1)
        return ans

 

你可能感兴趣的:(python)