本文主要是介绍代码随想录算法训练营Day51|LC309 买卖股票的最佳时机含冷冻期LC 714 买卖股票的最佳时机含手续费,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一句话总结:还是股票II的变形。
原题链接:309 买卖股票的最佳时机含冷冻期
这里比股票II多了个冷冻期的限制,于是多设置一个状态freeze,那么它就将初始化为freeze = 0(尽管第一天不可能是冷冻期);同时计算第i天的状态递推公式也将有些变化:
-
newBuy = Math.max(buy, freeze - prices[i]);
-
newSeal = buy + prices[i];
-
newFreeze = Math.max(freeze, seal);
即第i天的买股票最大收益由前一天为没有操作,或者前一天是冷冻期转移而来;第i天卖股票的最大收益由前一天持有股票,今天卖出而来;冷冻期的最大收益由前一天是冷冻期,或者当天即卖出得到的收益最大而来。代码如下:
class Solution {public int maxProfit(int[] prices) {int buy = -prices[0], seal = 0, freeze = 0;for (int i = 1; i < prices.length; ++i) {int newBuy = Math.max(buy, freeze - prices[i]);int newSeal = buy + prices[i];int newFreeze = Math.max(freeze, seal);buy = newBuy;seal = newSeal;freeze = newFreeze;}return Math.max(seal, freeze);}
}
原题链接:714 买卖股票的最佳时机含手续费
此题也是股票II的变形,无非多了手续费的条件。由于整个交易过程只收一次手续费,那么将收费的过程放在卖出股票时即可。此题需要小心的是sell状态的初始化,一定要初始化为0。
class Solution {public int maxProfit(int[] prices, int fee) {int buy = -prices[0], sell = 0;for (int i = 1; i < prices.length; ++i) {sell = Math.max(sell, buy + prices[i] - fee);buy = Math.max(buy, sell - prices[i]);}return sell;}
}
这篇关于代码随想录算法训练营Day51|LC309 买卖股票的最佳时机含冷冻期LC 714 买卖股票的最佳时机含手续费的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!