力扣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,适合买入