首页 > 其他 > 详细

leetcode每日一题(2020-06-17):1014. 最佳观光组合

时间:2020-06-17 11:36:36      阅读:67      评论:0      收藏:0      [点我收藏+]

给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。
一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。
返回一对观光景点能取得的最高分。
技术分享图片

今日学习:
1.动态规划!想到了用动态规划但是没想明白该怎么用!

题解1:

var maxScoreSightseeingPair = function(A) {
    //暴力法[妥妥的超时]
    const res = []
    for(let i = 0; i < A.length; i++) {
        for(let j = i + 1; j < A.length; j++) {
            res.push(A[i] + A[j] + i - j)
        }
    }
    return Math.max(...res)
};

题解2:其实对于每一个 j 来说,A[j] - j 是固定的,所以只需要找到最大的A[i] + i 就是当前 j 的最大结果,换成动态规划的话,就是dp[i]就是 i 之前最大的A[i] + i

// 包括dp[i]和常数个变量【因为和位置无关】
const maxScoreSightseeingPair = (A) => {
    // const dp = new Array(A.length)
    // dp[0] = 0
    let res = prev = 0
    for (let i = 1; i < A.length; i++) {
        // dp[i] = Math.max(dp[i - 1], A[i - 1] + i - 1)
        prev = Math.max(prev, A[i - 1] + i - 1)
        res = Math.max(res, prev + A[i] - i)
    }
    return res
}

leetcode每日一题(2020-06-17):1014. 最佳观光组合

原文:https://www.cnblogs.com/autumn-starrysky/p/13151407.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!