1014. 最佳观光组合

image.png

这一题看数据范围 50000,如果直接暴力搜索肯定是要超时的。

对于所有的i,j的组合我们要求的是最大的:
A[i]+A[j]+i-j 的和(i<j)
这里我注意到,后边这个A[j]-j其实是固定的,所以对于前边所有的i 我要取最大的A[i]+i 即可。 先预处理找出所有A[i]+i 的前缀和,然后依次遍历即可求解。

代码如下:

class Solution(object):
    def maxScoreSightseeingPair(self, A):
        """
        :type A: List[int]
        :rtype: int
        """
        n,ans = len(A),0
        pre_max_Ai_add_i = [0 for _ in range(n+1)]

        for i in range(1,n+1):
            pre_max_Ai_add_i[i] = max(pre_max_Ai_add_i[i-1],A[i-1]+(i-1))

        for j in range(1,n):
            ans = max(ans,pre_max_Ai_add_i[j]+A[j]-j)
        return ans

总结:固定一端,求另一端。

前缀和。

北语张益达
6 声望4 粉丝