leetcode——122题(中等)买卖股票的蕞佳时间

题目:

在这里插入图片描述




解题:

在这里插入图片描述

思路:121题和122题的同步升级的。121题的思路是说。在一个数组中,在最低点买入,最高点卖出(仅一次)。122题升级的是,买卖股票可以多次。那么我把121题的思路带进。也就是,在数组中拆分出多个小数组,每一个小数组就是一个121题。


那么问题是,怎么拆分?


我的理解是:在从索引0开始,只要是个顺序的增长,一旦发现当前到某个索引时,不能保证数组顺序,那么开始拆分。把顺序的那部分当做一个小数组,取出小数组的索引0和length-1做差值。再往后继续寻找

public int maxProfit(int[] prices) {
        //最小值 默认索引0
        int min = prices[0];
        //最大值 默认索引0
        int max = prices[0];
        //总差值
        int maxTotal = 0;
        for (int i = 1; i < prices.length; i++) {
            int price = prices[i];
            /**
             * 当前值 < 最大值
             * 那么说明已经到了 从最小值(索引) - 最大值(索引)
             * 这个区间范围内的最大差值。
             */
            if(price < max){
                maxTotal += max - min;
                //替换最大最小值,相当于从来一次开始行为(索引0开始)
                min = price;
                max = price;
            }else {
                //当前值 > 最大值
                //继续往后面寻找最大值
                max = price;
                //特殊情况,如果最大值是索引最后一个
                if(i == prices.length - 1){
                    maxTotal += max - min;
                }
            }
        }
        return maxTotal;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值