121. 买卖股票的最佳时机
今天两道题都不是很难,值得注意的点在于,必须要定义二维的dp数组来存储状态,
递推公式为:
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]);代码如下
public int maxProfit(int[] prices) {
int[][] dp = new int[prices.length][2];
dp[0][0] = -prices[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 Math.max(dp[dp.length-1][0],dp[dp.length-1][1]);
}
122. 买卖股票的最佳时机 II
和上一题一毛一样,直接上代码:
if(prices.length==1)return 0;
int[][] dp = new int[prices.length][2];
dp[0][0] = -prices[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 Math.max(dp[dp.length-1][0],dp[dp.length-1][1]);
}