最佳观光组合
观察公式 v a l u e s [ j ] − j + v a l u e s [ i ] + i values[j]-j+values[i]+i values[j]−j+values[i]+i发现,当枚举第二个 j j j的时候,对于每一个 v a l u e s [ j ] − j values[j]-j values[j]−j都是唯一确定的,因此只需要在遍历的时候维护 v a l u e s [ i ] + i values[i]+i values[i]+i的最大值即可
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& values) {
int res = 0, maxn = values[0];
for (int i = 1; i < valus.size(); i ++ ){
res = max(res, values[i] - i + maxn);
maxn = max(maxn, values[i] + i);
}
return res;
}
};
买卖股票的最佳时机
找差值最大的两天
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res = 0, minn = prices[0];
for (int i = 1; i < prices.size(); i ++ )
{
res = max(res, prices[i] - minn);
minn = min(minn, prices[i]);
}
return res;
}
};
买卖股票的最佳时机二
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res = 0, minn = 0, n = prices.size();
bool flag = false;
for (int i = 0; i < n; i ++ )
{
if (!flag){
while (i + 1 < n && prices[i] > prices[i + 1]) i ++ ;
flag = true;
minn = prices[i];
}
else{
while (i + 1 < n && prices[i] < prices[i + 1]) i ++ ;
flag = false;
res += prices[i] - minn;
}
}
return res;
}
};
本文探讨了两种优化问题的解决方案:最佳观光组合和股票交易的最佳时机。在最佳观光组合问题中,通过动态规划策略,计算每个景点的得分,以找到最大总分的观光对。在股票交易的最佳时机问题中,分别展示了两种不同的方法来寻找最大利润。第一种是简单的贪婪策略,第二种则考虑了价格下降时的等待机会。这些算法为实际问题提供了有效的求解思路。
602

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



