《观光景点组合得分问题》| 豆包MarsCode AI刷题

69 阅读2分钟

笔记:观光景点组合得分问题

问题描述

QQ浏览器截图20241117202007.png

输入输出

  • 输入:一个整数数组 values
  • 输出:一个整数,表示最大组合得分。

算法设计

  1. 初始化:设置两个变量 max_i_plus_valuesmax_score,分别用于记录当前最大索引加值的和以及最大得分。
  2. 遍历数组:从第二个元素开始遍历数组,对于每个元素 values[j],计算 values[j] - j,并更新 max_scoremax_i_plus_values
  3. 更新逻辑
    • max_score 更新为 max(max_score, max_i_plus_values + current),其中 currentvalues[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

测试样例

  • 测试样例1solution([8, 3, 5, 5, 6]) 返回 11
  • 测试样例2solution([10, 4, 8, 7]) 返回 16
  • 测试样例3solution([1, 2, 3, 4, 5]) 返回 8

总结

这个算法通过一次遍历解决了问题,时间复杂度为 O(n),空间复杂度为 O(1)。它利用了贪心策略,每次选择当前能够使得分最大化的元素组合。这种方法简单且高效,适用于处理此类数组问题。借助豆包MarsCode AI刷题平台,我们高效地解决了《观光景点组合得分问题》,还加深了对相关算法理解,后续会借助豆包MarsCode AI给大家展示更多题目的解法。