题目理解
- 目标:找到一对观光景点
(i, j),使得values[i] + values[j] + i - j的值最大。 - 公式:
score = values[i] + values[j] + i - j,其中i < j。
数据结构选择
- 数组:使用数组
values存储每个景点的评分。
算法步骤
-
初始化:
- 设置一个变量
max_score用于存储当前找到的最大得分,初始值为 0。 - 获取数组
values的长度n。
- 设置一个变量
-
双重循环:
- 使用两层循环遍历所有可能的景点对
(i, j),其中i < j。 - 对于每一对
(i, j),计算得分score = values[i] + values[j] + i - j。 - 更新
max_score为当前max_score和score中的较大值。
- 使用两层循环遍历所有可能的景点对
-
返回结果:
- 循环结束后,返回
max_score。
- 循环结束后,返回
代码实现
实现步骤:
def solution(values: list) -> int:
max_score = 0
n = len(values)
for i in range(n):
for j in range(i + 1, n):
score = values[i] + values[j] + i - j
max_score = max(max_score, score)
return max_score
测试样例
- 样例1:
values = [8, 3, 5, 5, 6],预期输出:11。 - 样例2:
values = [10, 4, 8, 7],预期输出:16。 - 样例3:
values = [1, 2, 3, 4, 5],预期输出:8。
复杂度分析
- 时间复杂度:O(n^2),因为使用了双重循环遍历所有可能的景点对。
- 空间复杂度:O(1),只使用了常数级别的额外空间。
优化思路
- 当前算法的时间复杂度为 O(n^2),可以考虑优化为 O(n) 的时间复杂度。
- 可以通过维护一个变量来记录当前最优的
values[i] + i,从而减少内层循环的计算量。
总结
- 该题目通过双重循环遍历所有可能的景点对,计算并更新最大得分。
- 可以通过优化算法来减少时间复杂度,进一步提升效率。