买卖股票的最佳时机II(力扣122)
这道题有两个注意点,一是我们永远都只能持有一支股票,二是一天之中只能在买股票和卖股票中二选一。因此我们至少要从第二天开始才有利润收入,也就是每两天是一个交易单元,这一点后面要用到。第一次做这道题一般都是这样想,选一个价格低的一天买入,再选个价格高的一天卖,再选一个低的买入.....循环反复,但我们根本确定不了多高算高,多低算低。不妨换一种思考方式,举个例子:我们第一天买股票,第三天卖股票,期间获得的利润可以拆成第一天到第二天的利润与第二天到第三天的利润之和,也就是将一次买卖拆成多个交易单元。于是贪心的点就出来了,我们只有在当前交易单元的利润为正时,才将其算入我们最终买卖股票的利润当中。局部最优,也就是只有当交易单元利润为正才算入总利润,全局最优就是最后得到的利润是我们能获取的最大值。大家可以结合我下面的代码及详细注释理解此题。
代码及详细注释如下:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int sum = 0;
int day_price;//每个交易单元的利润
//从第二天开始才有利润,于是i从1开始
for(int i = 1;i < prices.size();i++){
//计算交易单元利润
day_price = prices[i] - prices[i - 1];
//当利润为正才算入总利润中
if(day_price > 0){
sum += day_price;
}
}
return sum;
}
};