309. Best Time to Buy and Sell Stock with Cooldown
来源:互联网 发布:tina8.0电路仿真软件 编辑:程序博客网 时间:2024/06/04 06:54
Say you have an array for which the ith element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times) with the following restrictions:
- You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
- After you sell your stock, you cannot buy stock on next day. (ie, cooldown 1 day)
Example:
prices = [1, 2, 3, 0, 2]maxProfit = 3transactions = [buy, sell, cooldown, buy, sell]
There are totally 3 states, buy, sell and cool.
buy[i] means holding stock at the end of day i;
sell[i] means sell the stock at day i;
cool[i] means do not hold the stock at the end of day i - 1.
buy[i] = Math.max(buy[i - 1], cool[i - 1] = prices[i]).
The first condition is hold the stock at day i -1 and do no transaction.
The second condition is in cool time at day i - 1 and buy stock at day[i];
sell[i] = buy[i - 1] + prices[i]
it means hold the stock and day i - 1 and sell it at day[i]
cool[i] = Math.max(cool[i - 1], sell[i - 1])
The first condition means already in cool at day i - 1 and do not transaction.
The second condition means sell the stock at day i - 1 and today is the first cool down day.
Code:
public class Solution { public int maxProfit(int[] prices) { if(prices.length <= 1) return 0; int[] buy = new int[prices.length]; int[] sell = new int[prices.length]; int[] cool = new int[prices.length]; buy[0] = -prices[0]; for(int i = 1; i < prices.length; i++){ buy[i] = Math.max(buy[i - 1], cool[i - 1] - prices[i]); sell[i] = buy[i - 1] + prices[i]; cool[i] = Math.max(cool[i - 1], sell[i - 1]); } return Math.max(sell[prices.length - 1],cool[prices.length - 1]); }}
- 309.Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- 309. Best Time to Buy and Sell Stock with Cooldown
- SpringBoot使用thymeleaf模板引擎
- 用rem来做响应式开发
- 日志筛选工具(一)
- 队列的实现-顺序队列和链队列
- Android studio2.3来了,也带来不少坑:gradle编译不通过,无法运行到小米手机上。。。
- 309. Best Time to Buy and Sell Stock with Cooldown
- 简单树形动态规划(ural 1039 没有上司的晚会)
- 物联网本质是什么?
- 十分明了的事件分发文章
- InnoDB行记录格式
- Hey Siri,你究竟是男是女?
- fig06_21.cpp
- java如何把String转换成xml
- FunDA(13)- 示范:用户自定义操作函数