代码随想录算法训练营第四十九天 | 买卖股票的最佳时机

● 今日学习的文章链接和视频链接

题目121. 买卖股票的最佳时机
题目122. 买卖股票的最佳时机 II

● 看到题目的第一想法

嗨嗨嗨!成功回归刷题

● 看完代码随想录之后的想法

棒(๑•̀ㅂ•́)و✧

● 实现过程中遇到哪些困难

第二题原来这样做!

● 解题代码

  1. 点击查看代码
    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];
        }
    }
    
  2. 点击查看代码
    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
posted @ 2024-01-16 14:30  雨年今天有记录吗  阅读(3)  评论(0)    收藏  举报