AI 刷题 11.观光景点组合得分问题 题解 | 豆包MarsCode AI刷题

31 阅读1分钟

题目理解

  • 目标:找到一对观光景点 (i, j),使得 values[i] + values[j] + i - j 的值最大。
  • 公式score = values[i] + values[j] + i - j,其中 i < j

数据结构选择

  • 数组:使用数组 values 存储每个景点的评分。

算法步骤

  1. 初始化

    • 设置一个变量 max_score 用于存储当前找到的最大得分,初始值为 0。
    • 获取数组 values 的长度 n
  2. 双重循环

    • 使用两层循环遍历所有可能的景点对 (i, j),其中 i < j
    • 对于每一对 (i, j),计算得分 score = values[i] + values[j] + i - j
    • 更新 max_score 为当前 max_score 和 score 中的较大值。
  3. 返回结果

    • 循环结束后,返回 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

测试样例

  • 样例1values = [8, 3, 5, 5, 6],预期输出:11
  • 样例2values = [10, 4, 8, 7],预期输出:16
  • 样例3values = [1, 2, 3, 4, 5],预期输出:8

复杂度分析

  • 时间复杂度:O(n^2),因为使用了双重循环遍历所有可能的景点对。
  • 空间复杂度:O(1),只使用了常数级别的额外空间。

优化思路

  • 当前算法的时间复杂度为 O(n^2),可以考虑优化为 O(n) 的时间复杂度。
  • 可以通过维护一个变量来记录当前最优的 values[i] + i,从而减少内层循环的计算量。

总结

  • 该题目通过双重循环遍历所有可能的景点对,计算并更新最大得分。
  • 可以通过优化算法来减少时间复杂度,进一步提升效率。