11. 观光景点组合得分问题
AI 概述
问题描述测试样例解题思路最优解法代码实现代码解释
刷题前请喊一遍我们的口号:
方法不对,刷题白费。
节省时间,精准刷题。
本题难度系数:⭐⭐⭐中等
问题描述
小 R 正在研究一组观光景点,每个景点都有一个评分,保存在数组 values 中,其中 values[i] 表示第 i 个观光景点的...
目录
刷题前请喊一遍我们的口号:
- 方法不对,刷题白费。
- 节省时间,精准刷题。
本题难度系数:⭐⭐⭐中等
问题描述
小 R 正在研究一组观光景点,每个景点都有一个评分,保存在数组 values 中,其中 values[i] 表示第 i 个观光景点的评分。同时,景点之间的距离由它们的下标差 j - i 表示。
一对景点 (i < j) 的观光组合得分为 values[i] + values[j] + i - j,也就是两者评分之和减去它们之间的距离。
小 R 想知道,在哪种情况下能够获得观光景点组合的最高得分。
约束条件:
- 2 <=
values.length - 1 <=
values[i]<= 1000
测试样例
样例 1:
输入:
values = [8, 3, 5, 5, 6]
输出:11
样例 2:
输入:
values = [10, 4, 8, 7]
输出:16
样例 3:
输入:
values = [1, 2, 3, 4, 5]
输出:8
解题思路
这道题目要求我们找到一对景点 (i, j),其中 i < j,使得 values[i] + values[j] + i - j 的值最大。我们可以将这个公式重新整理为 (values[i] + i) + (values[j] - j)。这样,我们可以将问题分解为两部分:
- 对于每个
j,我们需要找到i < j使得values[i] + i最大。 - 然后计算
(values[i] + i) + (values[j] - j)的最大值。
最优解法
我们可以使用一次遍历的方法来解决这个问题:
- 初始化
maxScore为负无穷,maxValuePlusI为values[0] + 0(即values[0])。 - 从
j = 1开始遍历数组:- 计算当前
j的得分:currentScore = maxValuePlusI + values[j] - j。 - 更新
maxScore为max(maxScore, currentScore)。 - 更新
maxValuePlusI为max(maxValuePlusI, values[j] + j)。
- 计算当前
- 最后返回
maxScore。
这种方法的时间复杂度是 O(n),空间复杂度是 O(1),是最优的解法。
代码实现
function solution(values) {
let maxScore = -Infinity;
let maxValuePlusI = values[0] + 0; // i starts from 0
for (let j = 1; j < values.length; j++) {
// Calculate the current score
const currentScore = maxValuePlusI + values[j] - j;
// Update the max score
maxScore = Math.max(maxScore, currentScore);
// Update the max value of (values[i] + i)
maxValuePlusI = Math.max(maxValuePlusI, values[j] + j);
}
return maxScore;
}
function main() {
console.log(solution([8, 3, 5, 5, 6]) === 11 ? 1 : 0);
console.log(solution([10, 4, 8, 7]) === 16 ? 1 : 0);
console.log(solution([1, 2, 3, 4, 5]) === 8 ? 1 : 0);
}
main();
代码解释
- 初始化:
maxScore初始化为负无穷,maxValuePlusI初始化为values[0] + 0(即第一个元素的值加上其索引)。 - 遍历数组:从第二个元素开始遍历:
- 计算当前
j的得分currentScore,即maxValuePlusI + values[j] - j。 - 更新
maxScore为当前得分和之前最大得分的较大值。 - 更新
maxValuePlusI为当前values[j] + j和之前maxValuePlusI的较大值。
- 计算当前
- 返回结果:遍历结束后,
maxScore即为所求的最大得分。
以上关于11. 观光景点组合得分问题的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 11. 观光景点组合得分问题
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 11. 观光景点组合得分问题

微信
支付宝