LeetCode第2天 | 动态规划 | 20220714

LeetCode第2天 | 动态规划 | 20220714

动态规划

本文章参考了许多他人的笔记,仅供自己学习复习使用。
leetcode官网



【第一题】 1014. 最佳观光组合

1.1 思路

1.1.1 超时的暴力求解

class Solution {
public:
    int maxScoreSightseeingPair(vector<int>& values) {
        int maxVal = 0;
        int tmp = values[0]+values[1];
        for(int i =0;i<values.size();i++){
            for(int j =i+1; j < values.size();j++){
                int val = values[i]+values[j]-j+i;
                if(val >= maxVal){
                    maxVal = val;
                }
            }
        }

        return maxVal;
    }
};

1.1.2 官方

关键:四则运算的结合律
得分 = values[i] + values[j] + i - j => 得分 = ( values[i] + i) + ( values[j] - j)
其中,在遍历到第 j 个元素时,values[j] - j不变,只考虑values[i]+i 的变化即可。设置一个变量mx = values[i]+i 记录最大值。

class Solution {
public:
    int maxScoreSightseeingPair(vector<int>& values) {
        int ans = 0, mx = values[0] + 0;
        for (int j = 1; j < values.size(); ++j) {
            ans = max(ans, mx + values[j] - j);
            // 边遍历边维护
            mx = max(mx, values[j] + j);
        }
        return ans;
    }
};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值