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;
}
};