[LeetCode]Best Time to Buy and Sell Stock with Cooldown
2016-01-15 16:51
267 查看
其实遇到这种容易陷入到具体某一种细节情况的问题的时候,就要有意识,这个题很有可能是DP相关问题。类似的题目还包括编辑距离、最长公共子序列等。
求解这类问题时(DP)就是两点:1、状态转移方程;2、Corner case
只是在这道题中状态转移方程比较不容易看出。
在你获取利润的时候一定是在卖出股票的时候(买入没有利润),那么本天结束时的利润只有两种状态,1、本天没有进行操作;2、本天卖出了股票。而其中本天没有操作的利润最大值是前一天卖出和未操作两者之中较大的那个,本天卖出了股票的利润有三种情况,1、昨天卖了,然后昨天再买入今天卖出,相当于昨天没卖今天卖了;2、昨天没操作,今天买今天卖;3、昨天没操作,昨天买昨天卖。分析可知1、3情况下3一定小于1,如果3>1此时昨天不能买,因为前天有卖出。
public class Solution {
public int maxProfit(int[] prices) {
int p1 = 0,p2 = 0;
for(int i = 0;i < prices.length-1;i++){
int temp = p1;
p1 = Math.max(p1+prices[i+1]-prices[i],p2);
p2 = Math.max(temp,p2);
}
return Math.max(p1,p2);
}
}
求解这类问题时(DP)就是两点:1、状态转移方程;2、Corner case
只是在这道题中状态转移方程比较不容易看出。
在你获取利润的时候一定是在卖出股票的时候(买入没有利润),那么本天结束时的利润只有两种状态,1、本天没有进行操作;2、本天卖出了股票。而其中本天没有操作的利润最大值是前一天卖出和未操作两者之中较大的那个,本天卖出了股票的利润有三种情况,1、昨天卖了,然后昨天再买入今天卖出,相当于昨天没卖今天卖了;2、昨天没操作,今天买今天卖;3、昨天没操作,昨天买昨天卖。分析可知1、3情况下3一定小于1,如果3>1此时昨天不能买,因为前天有卖出。
public class Solution {
public int maxProfit(int[] prices) {
int p1 = 0,p2 = 0;
for(int i = 0;i < prices.length-1;i++){
int temp = p1;
p1 = Math.max(p1+prices[i+1]-prices[i],p2);
p2 = Math.max(temp,p2);
}
return Math.max(p1,p2);
}
}
相关文章推荐
- mysql_explain
- 做毕业设计遇到的各种错误——之时间戳
- graylog在Ubuntu14中的安装
- MapReduce输出到MySQL编码错误解决
- python 编码问题
- 最近遇到nutch导入eclipse后产生到一些问题
- iOS设备信息
- Redhat Linux 6.4 mail server configuration
- Java基于Socket实现HTTP下载客户端
- SQL 递归 CTE
- php命名空间学习笔记。
- 查看 SQL Server 2000 数据表的大小并不难
- redis常见操作命令-key
- Sqoop将SQLServer数据导入HBase
- Visual Studio 2015编译安装配置QT5.5.1(含QTWEBKIT)
- Go Data Structures: Interfaces
- HTML5会砸掉iOS和Android开发者的饭碗么?
- Java监控工具、调优、调试辅助函数
- JAVA设计模式之:访问者模式
- zabbix节点自动化安装