您的位置:首页 > 其它

[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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: