1014. 最佳观光组合
这一题看数据范围 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
总结:固定一端,求另一端。
前缀和。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。