股票问题
- 309. 买卖股票的最佳时机含冷冻期
- 714.买卖股票的最佳时机含手续费
309. 买卖股票的最佳时机含冷冻期
这个视频讲解的很好 309.最佳买卖股票时机含冷冻期
class Solution {
public int maxProfit(int[] prices) {
int day = prices.length;
int [][] dp = new int[day][2];
dp[0][0] = 0; // 0表示不持有股票
dp[0][1] = -prices[0];
for(int i=1;i<day;i++){
dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]+prices[i]); //不持有股票 1.保持昨天 2.卖掉了昨天
dp[i][1] = Math.max(dp[i-1][1],(i-2>=0?dp[i-2][0]:0) - prices[i] );
}
return dp[day-1][0];
}
}
方法二:一维数组
class Solution {
public int maxProfit(int[] prices) {
int buy = Integer.MIN_VALUE; //表示买入时候的最大利润
int sold =0; // 表示卖出之后的最大利润
int cool =0; // 表示表示冷冻期时间的最大利润
for(int p :prices){
buy = Math.max(buy,cool -p);
cool = Math.max(cool,sold);
sold =Math.max(sold,buy+p);
}
return Math.max(sold,cool);
}
}
714.买卖股票的最佳时机含手续费
和122提几乎一样
class Solution {
public int maxProfit(int[] prices, int fee) {
int day = prices.length;
int dp[] = new int[2];
dp[0] = 0;//不持有股票的最大利润
dp[1] = -prices[0];//持有股票的最大利润
for(int i=1;i<day;i++){
dp[0] = Math.max(dp[0],dp[1]+prices[i]-fee);
dp[1] = Math.max(dp[1],dp[0]-prices[i]);
}
return dp[0];
}
}