笔记:观光景点组合得分问题
问题描述
输入输出
- 输入:一个整数数组
values。 - 输出:一个整数,表示最大组合得分。
算法设计
- 初始化:设置两个变量
max_i_plus_values和max_score,分别用于记录当前最大索引加值的和以及最大得分。 - 遍历数组:从第二个元素开始遍历数组,对于每个元素
values[j],计算values[j] - j,并更新max_score和max_i_plus_values。 - 更新逻辑:
max_score更新为max(max_score, max_i_plus_values + current),其中current是values[j] - j。max_i_plus_values更新为max(max_i_plus_values, values[j] + j)。
代码实现
def solution(values: list) -> int:
n = len(values)
if n < 2:
return 0 # 如果数组长度小于2,无法形成组合,返回0或其他适当值
# 初始化
max_i_plus_values = values[0] + 0 # 初始时i=0
max_score = values[0] + values[1] + 0 - 1 # 初始组合 (0,1)
# 从第二个元素开始遍历
for j in range(1, n):
# 计算当前j的values[j] - j
current = values[j] - j
# 更新最大组合得分
max_score = max(max_score, max_i_plus_values + current)
# 更新max_i_plus_values
max_i_plus_values = max(max_i_plus_values, values[j] + j)
return max_score
测试样例
- 测试样例1:
solution([8, 3, 5, 5, 6])返回11。 - 测试样例2:
solution([10, 4, 8, 7])返回16。 - 测试样例3:
solution([1, 2, 3, 4, 5])返回8。
总结
这个算法通过一次遍历解决了问题,时间复杂度为 O(n),空间复杂度为 O(1)。它利用了贪心策略,每次选择当前能够使得分最大化的元素组合。这种方法简单且高效,适用于处理此类数组问题。借助豆包MarsCode AI刷题平台,我们高效地解决了《观光景点组合得分问题》,还加深了对相关算法理解,后续会借助豆包MarsCode AI给大家展示更多题目的解法。