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;
}
};
本文介绍了如何通过利用动态规划解决LeetCode题目1014,通过暴力求解和官方高效算法对比,讲解了四则运算结合律在优化代码中的应用。重点在于如何通过维护变量mx简化计算过程,提高求解效率。

被折叠的 条评论
为什么被折叠?



