要求
代码
class Solution {
public:
int maxProfit(vector<int>& prices) {
int hnsp_last = 0; //have_no_stock_profit
int hsp_last = -prices[0];
int hnsp = 0;
int hsp = 0;
for (int i = 1; i < prices.size(); i++)
{
hnsp = max(hnsp_last, hsp_last + prices[i]);
hsp = max(hsp_last, hnsp_last - prices[i]);
hnsp_last = hnsp;
hsp_last = hsp;
}
return hnsp;
}
};
考虑当天拥有股票的利润和当天没有股票的利润取决于前一天有股票和没有股票的利润,因此可以定义四个变量分别保存这四个值,最后一天没有股票的利润则为最大的利润。
在题解中有贪心算法,思路就是相邻的两天股票上涨就算利润,股票下降就不算,把可能跨越多天的买卖都化解成相邻两天的买卖。