力扣122题、714题(买卖股票)

122、买卖股票的最佳时机II

基本思想:

贪心算法

具体实现:

局部最优:收集每天的正利润

全局最优:求得最大利润

 

 

代码:

class Solution {
    public int maxProfit(int[] prices) {
        int result = 0;
        for (int i = 1; i < prices.length; i++){
            result += Math.max(prices[i] - prices[i-1],0);
        }
        return result;
    }
}

 

714、买卖股票的最佳时机含手续费

基本思想:

贪心不会不会不会,,下面写的是一堆狗屎,希望我聪明了以后回来再看

具体实现:

买入日期:遇到更低点就记录

卖出日期:只要当前价格大于最低价格+手续费,就可以收获利润

情况1:收获利润的这一天并不是收获利润区间里的最后一天(没有卖出股票,是持有股票),后面还要继续收获利润

情况2:前一天是收获利润区间里的最后一天(相当于卖出股票),今天重新记录最小价格

情况3:不作操作,保持原有状态

放到最小价格minPrice这里的值只有两种选择

1.有利润·卖出以后,为了保证下一波的买入

举例:

prices = [1, 3, 2, 8, 4, 9], fee = 2

第0天买入1,记录最低价格minPrice=1

第1天股票为3,3 = minPrice + fee,没赚没亏,所以不用管,继续往后走

第2天股票为2,2 <  minPrice + fee,卖掉的话会亏,

                           2 > minPrice,不适合买入

第3天股票为8,8 > minPrice + fee,卖掉的话会赚,所以卖掉,并更新minPrice为(第3天股票-fee)= 6

第4天股票为4,4 <  minPrice,更新 minPrice,适合买入

第5天股票为9,9  > minPrice + fee,卖掉的话会赚,所以卖掉

 

prices = [1,3,7,5,10,3], fee = 3

第0天买入1,记录最低价格minPrice=1

第1天股票为3,3 < minPrice + fee,卖掉的话会亏,所以不用管,继续往后走

        3 > minPrice,不适合买入

第2天股票为7,7 > minPrice + fee,卖掉的话会赚,所以卖掉,并更新minPrice为(第2天股票-fee)= 4

第3天股票为5,  5 < minPrice + fee,卖掉的话会亏,所以不用管,继续往后走

       5 > minPrice,不适合买入

第4天股票为10,10 > minPrice + fee,卖掉的话会赚,所以卖掉,并更新minPrice为(第4天股票-fee)= 8

第5天股票为3,3  < minPrice,适合买入

代码:

posted @ 2021-10-21 22:28  最近饭吃的很多  阅读(76)  评论(0编辑  收藏  举报