● 121. 买卖股票的最佳时机 Best Time to Buy and Sell Stock - LeetCode
dp[i][0] 持有股票得到的最大现金
dp[i][1] 不持有股票得到的最大现金
dp[i][0] = max(dp[i - 1][0], -price[i]);
dp[i - 1][1]
dp[i - 1][0] + price[i]
dp[i][1] = max(dp[i - 1][0], dp[i - 1] + price[i])
初始化:
dp[0][0] = -price[0]
dp[0][1] = 0;
遍历顺序:从前往后
for(int i = 0; i < len; i++)
class Solution {public int maxProfit(int[] prices) {int min = prices[0];int res = Integer.MIN_VALUE;for (int i = 0; i < prices.length; i++) {min = Math.min(min, prices[i]);res = Math.max(res, prices[i] - min);}return res;}
}
class Solution {public int maxProfit(int[] prices) {int n = prices.length;int[][] dp = new int[n][2];/**dp[i][0]表示第i天持有股票dp[i][1]表示第i天不持有股票*/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[n - 1][1];}
}
● 122.买卖股票的最佳时机II Best Time to Buy and Sell Stock II - LeetCode
dp[i][0] 持有股票
dp[i][1] 不持有股票
class Solution {public int maxProfit(int[] prices) {int profit = 0;for (int i = 1; i < prices.length; i++) {profit += Math.max(prices[i] - prices[i - 1], 0);}return profit;}
}
class Solution {public int maxProfit(int[] prices) {int n = prices.length;int[][] dp = new int[n][2];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[n - 1][1];}
}