买股票的最佳时机
动态规划入门题。
最简单的模拟式解法:
class Solution {
public:
int maxProfit(vector<int>& prices) {
//也可以换一种思路,因为只交易一次,那么找出股票最便宜的时候买入,最贵的时候卖出,最大利润为(该天的股价-前面天数中最小的股价)
int profit=0;
int cost=prices[0];
for(int i=1;i<prices.size();i++)
{
profit=max(prices[i]-cost,profit);
cost=min(prices[i],cost);
}
return profit;
}
};
动态规划解法:
class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<vector<int>>dp(prices.size(),vector<int>(2,0));
dp[0][0]=0;
dp[0][1]=-prices[0];
for(int i=1;i<prices.size();i++)
{
//只能交一次易
//第i天没有持有股票的最大利润为前一天没有持有股票,并且第i天也没有买入;第i-1天有,但今天卖出
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]);
//第i天持有股票的最大利润是:前一天有股票,第i天没有卖出,或者第i天买入
dp[i][1]=max(dp[i-1][1],-prices[i]);
}
return dp[prices.size()-1][0];
}
};