ARTS Week 23
Algorithm 本周的算法题为 1014. 最佳观光组合 给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j - i。 一对景点(i < j)组成的观光组合的得分为 values[i] + values[j] + i - j ,也就是景点的评分之和 减去 它们两者之间的距离。 返回一对观光景点能取得的最高分。 示例 1: 输入:values = [8,1,5,2,6] 输出:11 解释:i = 0, j = 2, values[i] + values[j] + i - j = 8 + 5 + 0 - 2 = 11 实现代码如下: const maxScoreSightseeingPair = function (values) { let maxValue = 0 let maxPrev = values[0] // 记录前面位置能够得到的最大得分 for (let i = 1; i < values.length; i++) { maxValue = Math.max(maxValue, maxPrev + values[i] - i) // 计算当前位置的得分 maxPrev = Math.max(maxPrev, values[i] + i) // 更新前面位置能够得到的最大得分 } return maxValue } 解题思路: 一开始我以为使用两个for循环然后通过Math.max()比较一下取最大值就解出来,然后提交到力扣后,提示超出时间限制。 为了解决这个问题,可以使用动态规划来优化算法以避免重复计算,通过调整计算公式为values[i] + i + (values[j] - j),可以将当前位置的值加上索引值,再加上下一个位置的值减去索引值,然后取最大值。因此,可以将values[i] + i和values[j] - j分别都取最大值,然后再比较两者的和,从而得到观光景点能取得的最高分。 Review Human speech is 8 times older than we thought - Breaking News English Lesson ...