思路分析:
- 初始化左侧景点的评分为第一个景点的评分,最终结果为0。
- 从第二个景点开始遍历数组。
- 对于每个景点,计算当前观光组合的得分,即当前景点的评分 + 左侧景点的评分 - 两者之间的距离。
- 更新最终结果为当前得分和之前结果的较大值。
- 更新左侧景点的评分为当前景点的评分 + 其在数组中的索引。
- 遍历完成后,最终结果即为最高的观光组合得分。
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& values) {
// 获取数组的长度
int n = values.size();
// 初始化左侧景点的评分为第一个景点的评分
int left = values[0];
// 初始化最终结果为0
int res = 0;
// 从第二个景点开始遍历
for(int i = 1; i < n; i++) {
// 计算当前观光组合的得分,即当前景点的评分 + 左侧景点的评分 - 两者之间的距离
int currentScore = left + values[i] - i;
// 更新最终结果为当前得分和之前结果的较大值
res = max(res, currentScore);
// 更新左侧景点的评分为当前景点的评分 + 其在数组中的索引
left = max(left, values[i] + i);
}
// 返回最终结果
return res;
}
};