买卖股票的最佳时机
作者:互联网
这是一个系列,也是dp经典题,特别写篇博客。
leetcode 121 买卖股票的最佳时机 简单
只能买卖一次股票,那只需要从第一天开始一次遍历,不停地更新买的最低价和能赚到的最大利润即可。
参考代码
class Solution {
public:
int maxProfit(vector<int>& prices) {
int ans=0,low=999999;
for(int i=0;i<prices.size();i++)
{
if(prices[i]<low)
low=prices[i];
else
ans=max(ans,prices[i]-low);
}
return ans;
}
};
leetcode122 买卖股票的最佳时机II 简单
可以多次买卖股票,但同时只能持有一支股票
只需要贪心即可,不停地扩大利润。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int last=prices[0],ans=0;
for(int i=1;i<prices.size();i++)
{
if(prices[i]<last)
last=prices[i];
else
{
ans+=prices[i]-last;
last=prices[i];
}
}
return ans;
}
};
当然,差分数组也是可以的,但理解有些困难,因为它并没有模拟买入卖出的过程,但其本质和上述代码是一样的。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int ans=0;
for (int i=1;i<prices.size();i++)
ans+=max(0,prices[i]-prices[i-1]);
return ans;
}
};
当然,还可以用动态规划,但在这道题上有些多余。毕竟接下来才是真正的重头戏。
力扣123 买卖股票的最佳时机III 困难
一下子从简单难度跃升为困难。
最多可以完成两笔交易,但还是只能同时最多拥有一支股票。
标签:买卖,int,股票,最佳时机,ans,prices 来源: https://www.cnblogs.com/S-N-O-R-L-A-X/p/15158548.html