做網(wǎng)站的費屬于什么費用建網(wǎng)站需要多少錢和什么條件
Day50 動態(tài)規(guī)劃 part11
123.買賣股票的最佳時機III
我的思路:
這道題考慮了交易次數(shù) j(最大次數(shù)為2),以及某天 i 應(yīng)該買or賣股票(兩種狀態(tài))
用三維數(shù)組表示
dp[i][j][0] – 第i天結(jié)束時,交易j次,手里沒有股票
狀態(tài)方程 dp[i][j][0] = Math.max(dp[i - 1][j][0], dp[i - 1][j][1] + prices[i])
dp[i][j][1] – 第i天結(jié)束時,交易j次,手里有股票
狀態(tài)方程 dp[i][j][1] = Math.max(dp[i - 1][j][1], dp[i - 1][j - 1][0] - prices[i])
解答:
class Solution {public int maxProfit(int[] prices) {int n = prices.length;int max = 2;int[][][] dp = new int[n][max + 1][2];for(int j = 0; j <= max; j++) {dp[0][j][0] = 0;dp[0][j][1] = -prices[0];}for(int i = 1; i < n; i++) {for(int j = 1; j <= max; j++) {dp[i][j][0] = Math.max(dp[i - 1][j][0], dp[i - 1][j][1] + prices[i]);dp[i][j][1] = Math.max(dp[i - 1][j][1], dp[i - 1][j - 1][0] - prices[i]);}}return dp[n - 1][max][0];}
}
188.買賣股票的最佳時機IV
我的思路:
和上一題代碼一樣,只是這題給定了最大交易次數(shù)k,只要把上一題的max換成k就行
解答:
class Solution {public int maxProfit(int k, int[] prices) {int n = prices.length;int[][][] dp = new int[n][k + 1][2];for(int j = 0; j <= k; j++) {dp[0][j][0] = 0;dp[0][j][1] = -prices[0];}for(int i = 1; i < n; i++) {for(int j = 1; j <= k; j++) {dp[i][j][0] = Math.max(dp[i - 1][j][0], dp[i - 1][j][1] + prices[i]);dp[i][j][1] = Math.max(dp[i - 1][j][1], dp[i - 1][j - 1][0] - prices[i]);}}return dp[n - 1][k][0];}
}