AI 刷题11. 观光景豆包MarsCode AI刷题

95 阅读3分钟

问题描述

小R正在研究一组观光景点,每个景点都有一个评分,保存在数组 values 中,其中 values[i] 表示第 i 个观光景点的评分。同时,景点之间的距离由它们的下标差 j - i 表示。

一对景点 (i < j) 的观光组合得分为 values[i] + values[j] + i - j,也就是两者评分之和减去它们之间的距离。

小R想知道,在哪种情况下能够获得观光景点组合的最高得分 好的,让我们来逐步解决这个问题。首先,我们需要理解题目要求:找到一对景点 (i, j) 使得 values[i] + values[j] + i - j 最大,其中 i < j

解题思路

  1. 分解公式:我们可以将公式 values[i] + values[j] + i - j 分解为 (values[i] + i) + (values[j] - j)。这样,我们可以分别处理 values[i] + ivalues[j] - j

  2. 遍历数组:我们可以遍历数组 values,对于每个 j,我们只需要找到在 j 之前的 i 使得 values[i] + i 最大。

  3. 动态更新最大值:在遍历过程中,我们可以动态更新 values[i] + i 的最大值,并用它来计算当前的 j 对应的得分。

代码提示

以下是代码的框架,其中关键步骤用注释标出:

def solution(values: list) -> int:
    # 初始化最大得分
    max_score = float('-inf')
    
    # 初始化当前最大 values[i] + i
    max_i_plus_value = float('-inf')
    
    # 遍历数组
    for j in range(len(values)):
        # 计算当前的得分
        current_score = max_i_plus_value + (values[j] - j)
        
        # 更新最大得分
        if current_score > max_score:
            max_score = current_score
        
        # 更新 max_i_plus_value
        if values[j] + j > max_i_plus_value:
            max_i_plus_value = values[j] + j
    
    return max_score

if __name__ == '__main__':
    print(solution(values=[8, 3, 5, 5, 6]) == 11)
    print(solution(values=[10, 4, 8, 7]) == 16)
    print(solution(values=[1, 2, 3, 4, 5]) == 8)

关键步骤解释

  1. 初始化max_score 用于存储最大得分,max_i_plus_value 用于存储当前最大的 values[i] + i
  2. 遍历数组:对于每个 j,计算当前得分 current_score,并更新 max_score
  3. 更新 max_i_plus_value:在每次遍历中,更新 max_i_plus_value 以确保它始终是当前最大的 values[i] + i

在编程中,遍历数组是一个非常基础且常见的操作。遍历数组意味着逐个访问数组中的每个元素,并对其进行某种操作。在Python中,我们可以使用多种方式来遍历数组。

遍历数组的几种常见方式

  1. 使用 for 循环: 这是最常见的遍历数组的方式。for 循环可以直接遍历数组中的每个元素。

    values = [8, 3, 5, 5, 6]
    for value in values:
        print(value)
    
  2. 使用 range 和索引: 如果你需要同时访问元素和它们的索引,可以使用 rangelen 函数。

    values = [8, 3, 5, 5, 6]
    for i in range(len(values)):
        print(f"Index: {i}, Value: {values[i]}")
    
  3. 使用 enumerate 函数enumerate 函数可以同时返回元素的索引和值,这在需要同时处理索引和值时非常方便。

    values = [8, 3, 5, 5, 6]
    for i, value in enumerate(values):
        print(f"Index: {i}, Value: {value}")
    

在当前代码中的应用

在你的代码中,遍历数组的操作可以用于计算每个景点的得分。以下是一个示例,展示了如何在 solution 函数中使用遍历数组来计算最大得分:

def solution(values: list) -> int:
    max_score = float('-inf')
    max_i_plus_value = float('-inf')
    
    # 遍历数组
    for j in range(len(values)):
        current_score = max_i_plus_value + (values[j] - j)
        
        if current_score > max_score:
            max_score = current_score
        
        if values[j] + j > max_i_plus_value:
            max_i_plus_value = values[j] + j
    
    return max_score

if __name__ == '__main__':
    print(solution(values=[8, 3, 5, 5, 6]) == 11)
    print(solution(values=[10, 4, 8, 7]) == 16)
    print(solution(values=[1, 2, 3, 4, 5]) == 8)

关键点

  • 遍历数组:使用 for 循环遍历数组中的每个元素。
  • 动态更新:在遍历过程中,动态更新 max_i_plus_valuemax_score

通过这种方式,你可以有效地计算出观光景点组合的最高得分。