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