leetcode 1014. Best Sightseeing Pair

一、题意

给出一个整数数组values,求values[i] + values[j] + i - j(i<j) 最大值。

二、解法

解法:
1、将式子拆分成values[i]+ivalues[j]-j
2、遍历数组,一边求到i之前的values[i]+i的最大值maxN,一边求max(maxN+values[j]-j)
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

三、代码

解法

  int maxScoreSightseeingPair(vector<int>& values) {
        int maxN=values[0];
        int ans=0;
        for(int i=1;i<values.size();i++){
            ans = max(maxN+values[i]-i,ans);
            maxN = max(maxN,values[i]+i);
        }
 
      return ans;
    }

四、总结

一开始想到了将式子拆分成values[i]+ivalues[j]-j,但是将它们完全分开来求最大值,然后相加,发现前后结果是有关联,它们的前后位置关系会影响结果,不能这样分开求。想在原来分开求基础上进行下去,发现找不到好的方法。于是只能看来一下官方讲解。(在保存这篇文章的时候,怎么都保存不了,最后发现使用了“最佳”两字做标题,被认为是标题党。)

五、引用

[1] leetcode:1014. 最佳观光组合
[2] leetcode:1014. 最佳观光组合官方解法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值