根据给出的算法步骤和分解方式,我们可以直接实现对应的代码框架,解决这个问题。以下是代码实现:
Python 实现
python
复制代码
def max_score_sightseeing_pair(values: list) -> int:
# 初始化最大得分为负无穷大
max_score = float('-inf')
# 初始化当前最大的 values[i] + i
max_i_plus_value = values[0] + 0
# 遍历数组,从第二个元素开始
for j in range(1, len(values)):
# 计算当前的得分
current_score = max_i_plus_value + values[j] - j
# 更新最大得分
max_score = max(max_score, current_score)
# 更新最大 values[i] + i
max_i_plus_value = max(max_i_plus_value, values[j] + j)
return max_score
# 测试用例
if __name__ == '__main__':
print(max_score_sightseeing_pair([8, 1, 5, 2, 6]) == 11) # 最佳组合是 (i=0, j=2)
print(max_score_sightseeing_pair([1, 2]) == 2) # 最佳组合是 (i=0, j=1)
详细解析
-
初始化变量:
max_score用于存储最终的最大得分。max_i_plus_value表示当前最大的values[i] + i,这是在遍历到当前元素之前所有可能的values[i] + i中最大的值。
-
遍历数组:
- 从第二个元素开始,计算
values[j] - j的值,并将其与max_i_plus_value相加,得到当前的current_score。 - 更新
max_score,确保我们记录的是最大得分。 - 更新
max_i_plus_value,确保后续的计算可以使用最新的最大值。
- 从第二个元素开始,计算
-
返回结果:
- 遍历结束后,
max_score存储的就是最大得分。
- 遍历结束后,
复杂度分析
-
时间复杂度:
- 遍历数组一次,时间复杂度为 O(n)。
-
空间复杂度:
- 只使用了常数个变量,空间复杂度为 O(1)。 根据给出的算法步骤和分解方式,我们可以直接实现对应的代码框架,解决这个问题。以下是代码实现:
Python 实现
python
复制代码
def max_score_sightseeing_pair(values: list) -> int:
# 初始化最大得分为负无穷大
max_score = float('-inf')
# 初始化当前最大的 values[i] + i
max_i_plus_value = values[0] + 0
# 遍历数组,从第二个元素开始
for j in range(1, len(values)):
# 计算当前的得分
current_score = max_i_plus_value + values[j] - j
# 更新最大得分
max_score = max(max_score, current_score)
# 更新最大 values[i] + i
max_i_plus_value = max(max_i_plus_value, values[j] + j)
return max_score
# 测试用例
if __name__ == '__main__':
print(max_score_sightseeing_pair([8, 1, 5, 2, 6]) == 11) # 最佳组合是 (i=0, j=2)
print(max_score_sightseeing_pair([1, 2]) == 2) # 最佳组合是 (i=0, j=1)
详细解析
-
初始化变量:
max_score用于存储最终的最大得分。max_i_plus_value表示当前最大的values[i] + i,这是在遍历到当前元素之前所有可能的values[i] + i中最大的值。
-
遍历数组:
- 从第二个元素开始,计算
values[j] - j的值,并将其与max_i_plus_value相加,得到当前的current_score。 - 更新
max_score,确保我们记录的是最大得分。 - 更新
max_i_plus_value,确保后续的计算可以使用最新的最大值。
- 从第二个元素开始,计算
-
返回结果:
- 遍历结束后,
max_score存储的就是最大得分。
- 遍历结束后,
复杂度分析
-
时间复杂度:
- 遍历数组一次,时间复杂度为 O(n)。
-
空间复杂度:
- 只使用了常数个变量,空间复杂度为 O(1)。