● 121. 买卖股票的最佳时机
class Solution { public int maxProfit(int[] prices) { /** dp[i][0] 持有股最大金额 dp[i][1] 不持股最大金额 */ if(prices == null || prices.length ==0 )return 0; int length = prices.length; int[][] dp = new int[length][2]; int result = 0; dp[0][0] = -prices[0]; dp[0][1] = 0; for(int i = 1;i<length;i++){ dp[i][0] = Math.max(dp[i-1][0],-prices[i]); dp[i][1] = Math.max(dp[i-1][0]+prices[i],dp[i-1][1]); } return dp[length-1][1]; } }
● 122.买卖股票的最佳时机II
class Solution { public int maxProfit(int[] prices) { int[] dp = new int[4]; dp[0] = -prices[0]; dp[1] = 0; dp[2] = -prices[0]; dp[3] = 0; for(int i = 1;i<=prices.length;i++){ dp[0] = Math.max(dp[0],-prices[i-1]); dp[1] = Math.max(dp[1],dp[0]+prices[i-1]); dp[2] = Math.max(dp[2],dp[1]-prices[i-1]); dp[3] = Math.max(dp[3],dp[2]+prices[i-1]); } return dp[3]; } }