121. 买卖股票的最佳时机
122.买卖股票的最佳时机II
- 买卖股票的最佳时机
class Solution {// public int maxProfit(int[] prices) {// int result = 0;// for(int i = 0;i<prices.length;i++){// for(int j = i+1;j<prices.length;j++){// result = Math.max(prices[j] - prices[i],result);// }// }// return result;// }public int maxProfit(int[] prices) {//dp[i][0] 第i天持有这个股票,最大现金//dp[i][1] 第i天不持有这个股票,最大现金//dp[i-1][1]//递推公式if (prices == null || prices.length == 0) return 0;int len = prices.length;int[][] dp = new int[len][2];int result = 0;dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1;i<prices.length;i++){//持有股票最大现金,前一天不购入和购入dp[i][0] = Math.max(dp[i-1][0],-prices[i]);//不持有股票最大现金,前一天不卖出和卖出dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]+prices[i]);}return dp[len-1][1];}
}
122.买卖股票的最佳时机II
class Solution {// public int maxProfit(int[] prices) {// int result = 0;// for(int i = 1;i<prices.length;i++){// result += Math.max(prices[i] - prices[i-1],0);// }// return result;// }public int maxProfit(int[] prices) {//dp[i][0] 第i天持有这个股票,最大现金//dp[i][1] 第i天不持有这个股票,最大现金//dp[i-1][1]//递推公式if (prices == null || prices.length == 0) return 0;int len = prices.length;int[][] dp = new int[len][2];int result = 0;dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1;i<prices.length;i++){//持有股票最大现金,前一天不购入和购入,和上一题区别在于它本地可以重复购入和卖出dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]-prices[i]);//不持有股票最大现金,前一天不卖出和卖出dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]+prices[i]);}return dp[len-1][1];}
}