博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode [309]Best Time to Buy and Sell Stock with Cooldown
阅读量:5096 次
发布时间:2019-06-13

本文共 1571 字,大约阅读时间需要 5 分钟。

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:

Input: [1,2,3,0,2]Output: 3 Explanation: transactions = [buy, sell, cooldown, buy, sell]

题目大意:

得到买卖股票获取的最大收益。

解法:

采用DP的方法来解决。

1.定义数组的状态

buy[i]代表在第i天最后一个Action是买的最大获益(但是这个Action可能不是发生在第i天,有可能是第i天之前发生的,有可能是在第i-1,i-2,i-3发生的)

sell[i]代表在第i天最后一个Action是卖的最大获益,所以方法的返回应该是sell[n-1],因为最后一个Action肯定是以卖结束的,而不是以买结束的。

2.定义数组的变化

第i天的买事件要么延续前面i-1的买事件(在当天不做买卖),要么是第i-2天是以卖结束的,第i天开始买。

第i天的卖事件要么延续前面i-1的卖事件(在当天不做买卖),要么是第i-1天是以买结束的,第i天开始卖。

可以得到方程式如下:

buy[i] = Math.max(buy[i - 1], sell[i - 2] - prices[i]); sell[i] = Math.max(sell[i - 1], buy[i - 1] + prices[i]);

3.优化空间负载度

由于buy,sell这两个数组只使用了第i,i-1和i-2这三天的。

所以b0,b1,b2分别代表buy[i],buy[i-1],buy[i-2],s0,s1,s2分别代表sell[i],sell[i-1],sell[i-2]

可以优化方程式如下:

b0 = Math.max(b1, s2 - prices[i]);s0 = Math.max(s1, b1 + prices[i]);

4.初始化

由于buy事件在第一天的最大的获益,就是将第一天的股票买入,就是-price[0]

而sell事件在第一天的最大获益则是0,因为前面没有股票买入。

java:

class Solution {    public int maxProfit(int[] prices) {        if (prices.length==0||prices.length==1) return 0;        int b0=-prices[0],b1=b0;        int s0=0,s1=0,s2=0;        for(int i=1;i

  

转载于:https://www.cnblogs.com/xiaobaituyun/p/10892711.html

你可能感兴趣的文章
回调没用,加上iframe提交表单
查看>>
socket总结
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
元素和为目标值的子矩阵数量
查看>>
POJ-1287.Network(Kruskal + Prim + Prim堆优化)
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
JSDoc规范
查看>>
ssh命令
查看>>
数据库中事务的浅析
查看>>
动态更改标题内容
查看>>
JAVA学长
查看>>
Spring AOP
查看>>
内置函数:abs_all_any
查看>>
【转】【项目管理与构建】Maven
查看>>
单链表中是否有环之java实现
查看>>
Python — magic method
查看>>
B*树
查看>>
HDU - 5701 中位数计数
查看>>
Hibernate学习笔记-Hibernate关系映射
查看>>