题目
给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。
一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。
返回一对观光景点能取得的最高分。
来源:力扣(LeetCode)
解决方法:
1、双循环,时间复杂度较高O(n^2)
2、单循环。将公式组合为(A[j] - j) + (A[i] + i)。将(A[i] + i)作为固定值:即(0,j - 1)范围内的最大值,遍历一次数组,时间复杂度为O(n)。
Python代码如下:
class Solution:
def maxScoreSightseeingPair(self, A: List[int]) -> int:
i = 0
distant = 0 #设置参数初始值
for j in range(1, len(A)): #由于i < j,j的初始值要从1开始
distant = max(A[i] + i + A[j] - j, distant)
if (A[j] + j) > (A[i] + i): #在j遍历的范围内寻找(A[i] + i)最大的值
i = j
return distant
注意事项:
1、题目要求 i < j,所以要设置 j 从1开始,且将(A[i] + i)作为固定值