代码随想录算法训练营第四十九天 | 买卖股票的最佳时机
● 今日学习的文章链接和视频链接
● 看到题目的第一想法
嗨嗨嗨!成功回归刷题
● 看完代码随想录之后的想法
棒(๑•̀ㅂ•́)و✧
● 实现过程中遇到哪些困难
第二题原来这样做!
● 解题代码
-
点击查看代码
class Solution { public int maxProfit(int[] prices) { if(prices.length == 0) return 0; if(prices.length == 1) return 0; int[][] dp = new int[prices.length][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],-prices[i]); dp[i][1] = Math.max(dp[i-1][1],prices[i]+dp[i][0]); } return dp[prices.length-1][1]; } } -
点击查看代码
class Solution { /* public int maxProfit(int[] prices) { int count = 0; for (int i = 1; i < prices.length; i++) { if(prices[i] > prices[i - 1]) { count += prices[i] - prices[i - 1]; } } return count; }*/ public int maxProfit(int[] prices) { //我说怎么那么熟悉原来用贪心写过 if(prices.length == 1) return 0; int[][] dp = new int[prices.length][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[prices.length-1][1]; } }
● 今日收获,学习时长
今日收获:今天的不难,但是好久没刷了还是看了答案,主要是第二题没想到怎么样把前面已经赚的钱拿过来,原来那么简单,真厉害啊动态规划。
学习时长:1h
浙公网安备 33010602011771号