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

32 阅读3分钟

问题理解

我们需要找到一对景点 (i, j) 使得 values[i] + values[j] + i - j 的值最大,其中 i < j

数据结构选择

我们可以使用一个变量来记录当前的最大得分,并在遍历数组时更新这个变量。

算法步骤

  1. 初始化:初始化一个变量 maxScore 来记录当前的最大得分,初始值为 0。
  2. 遍历数组:从左到右遍历数组 values
  3. 更新最大得分:对于每个位置 j,计算 values[i] + values[j] + i - j 的值,并与 maxScore 比较,更新 maxScore
  4. 返回结果:遍历结束后,maxScore 即为所求的最大得分。

关键点

  • 在遍历过程中,我们需要维护一个变量来记录当前最大的 values[i] + i,这样可以避免重复计算。

通过这种方式,我们可以在一次遍历中找到最大得分,时间复杂度为 O(n)。 maxv 的初始值设置为 0 是为了确保在遍历数组时,能够正确地计算和更新最大得分。让我们详细解释一下为什么 maxv 的初始值是 0。

详细解释

  1. maxv 的作用maxv 用于记录当前遍历过的位置中 values[j] + j 的最大值。这个值用于计算当前位置 i 和之前某个位置 j 的组合得分。

  2. 初始值的选择maxv 的初始值应该是一个不会影响最终结果的值。由于 values[j] + j 是一个正数(假设评分和下标都是非负的),初始值为 0 是一个合理的选择。

  3. 初始化 maxv 和 res

    • maxv 初始化为 0,用于记录当前遍历过的位置中 values[j] + j 的最大值。
    • res 初始化为 0,用于记录当前的最大得分。
  4. 遍历数组

    • 使用 for 循环遍历数组 values
  5. 更新 maxv 和 res

    • 在每次遍历时,更新 res,计算当前位置 i 和之前某个位置 j 的组合得分。
    • 更新 maxv,记录当前遍历过的位置中 values[j] + j 的最大值。
  6. 返回结果

    • 在遍历结束后,返回 res,即最大得分。

为什么初始值为 0 是合理的?

  • 不会影响计算:在第一次遍历时,maxv 会被更新为第一个位置的 values[j] + j。如果初始值设置为其他值(例如负数),可能会影响第一次计算的结果。
  • 简化逻辑:初始值为 0 简化了逻辑,避免了额外的条件判断。

代码中的具体作用

在代码中,maxv 的初始值为 0 确保了在第一次遍历时,maxv 会被正确更新为第一个位置的 values[j] + j。这样,后续的计算不会受到初始值的影响。### 示例

假设 values = [8, 3, 5, 5, 6],初始时 maxv = 0

  • 第一次遍历到 values[0] = 8maxv 更新为 8 + 0 = 8
  • 第二次遍历到 values[1] = 3maxv 更新为 8(因为 3 + 1 = 4 小于 8)。
  • 以此类推,maxv 会记录当前遍历过的位置中 values[j] + j 的最大值。

总结

maxv 的初始值为 0 是为了确保在遍历数组时,能够正确地计算和更新最大得分,并且简化了逻辑。