0
点赞
收藏
分享

微信扫一扫

【力扣-动态规划入门】【第 7 天】122. 买卖股票的最(佳)时机 II

标题:122. 买卖股票的最佳时机 II
难度:中等
天数:第7天,第3/3题

示例 1:

示例 2:

示例 3:

提示:

  • 1 <= prices.length <= 3 * 104
  • 0 <= prices[i] <= 104
class Solution {
    //动态规划 第 7 天  3/3
    //思路  
    //1. 只要有收益就卖,然后买入卖时的价格
    //2. 如果后边有低于买入的价格,就将买入的按卖出价格卖掉,再买入这个地价,
    //3. 出现低价放弃前一天的买入交易,改成当天买入
    //例:[7,1,5,3,6,4]   
    //  天数  |      |     |       |  结束交易持有价格| 操作盈利|
    // 第一天 |      | 买入7|       |       7       |   赚0  |
    //                                    |
    //                       | -----------V 
    //                       V
    // 第二天 | 卖出7 |买入1 | 7-7(卖出7) +1|       1       |  赚0  |
    //                                           |
    //                           |---------------V 
    //                           V
    // 第三天 | 卖出5 |买入5 | 5 - 1 +5|       5       |  赚4  |
    // 第四天 | 卖出5 |买入3 | 5 - 5 +3|       3       |  赚0  |
    // 第五天 | 卖出6 |买入6 | 6 - 3 +6|       6       |  赚3  |
    // 第六天 | 卖出6 |买入4 | 6 - 6 +4|       4       |  赚0  |
    public int maxProfit(int[] prices) {
        int size = prices.length;
        //记录卖出后最小价格
        int min = prices[0];
        //记录卖出后最大价格
        int max = prices[0];
        //记录利润
        int dp = 0;

        if(size == 1 ){
            return 0;
        }
        for(int i = 1; i < size ; i++){
            int item = prices[i];
              if(item < min){
                //出现低价  取消之前的高价买入
                max = item;
                // 最低价=当前买入价格
                min = item;
            }else if(item > max){
                //出现高价,记录高价
                max = item;
            }
            //如果 高价>持有价格  卖掉计算盈利
            if(max > min){
                //计算收益
                dp += max - min;
                //卖出后买入当前股票
                max = item;
                //最低价 = 当天买入价格
                min = item;
            }
        }
        return dp;
    }
}

举报

相关推荐

0 条评论