代码随想录算法训练营第五十天 | 买卖股票的最佳时机III、买卖股票的最佳时机IV
● 今日学习的文章链接和视频链接
● 看到题目的第一想法
两个hard题 但是掌握思路后不难
● 看完代码随想录之后的想法
很清晰
● 实现过程中遇到哪些困难
123
● 解题代码
-
点击查看代码
class Solution { public int maxProfit(int[] prices) { if(prices.length == 1) return 0; int[][] dp = new int[prices.length][5]; dp[0][0] = 0; dp[0][1] = -prices[0]; dp[0][2] = 0; dp[0][3] = -prices[0]; dp[0][4] = 0; for (int i = 1; i < prices.length; i++) { dp[i][0] = dp[i-1][0];//不操作 dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] - prices[i]);//第一次持有 dp[i][2] = Math.max(dp[i-1][2],dp[i-1][1] + prices[i]);//第一次不持有 dp[i][3] = Math.max(dp[i-1][3],dp[i-1][2] - prices[i]);//第二次持有 dp[i][4] = Math.max(dp[i-1][4],dp[i-1][3] + prices[i]);//第二次不持有 } return dp[prices.length-1][4]; } } -
点击查看代码
class Solution { public int maxProfit(int k, int[] prices) { if(prices.length == 1) return 0; int[][] dp = new int[prices.length][1+2*k]; dp[0][0] = 0; for (int i = 1; i < 1+2*k; i += 2) { dp[0][i] = -prices[0]; dp[0][i+1] = 0; } for (int i = 1; i < prices.length; i++) { dp[i][0] = dp[i-1][0]; for (int j = 1; j < 1+2*k; j += 2) { dp[i][j] = Math.max(dp[i-1][j],dp[i-1][j-1] - prices[i]);//第0天持有 dp[i][j+1] = Math.max(dp[i-1][j+1],dp[i-1][j] + prices[i]);//第k天不持有 } } return dp[prices.length-1][2*k]; } }
● 今日收获,学习时长
今日收获:学习了思路
学习时长:2h
浙公网安备 33010602011771号