代码随想录训练营第四十九天 | 动态规划

今天是第四十九天,用动态规划的思想去解决之前用贪心算法解决的股票买卖问题

 

  121. 买卖股票的最佳时机 

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        if(n == 1){
            return 0;
        }
        int[] dp = new int[n];
        dp[0] = 0;
        int min = prices[0];
        for(int i = 1; i<n; i++){
            if(prices[i] < min){
                min = prices[i];
            }
            dp[i] = Math.max(dp[i-1], prices[i] - min);
        }
        return dp[n-1];

    }
}

看当前利润和当前价格减去之前最小值,这两个值哪个利润最大,哪个就保留在dp[i]中为当前最大利润。

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

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        if(n ==1){
            return 0;
        }
        int[] dp = new int[n];
        dp[0] = 0;
        
        for(int i = 1; i<n; i++){
            
            dp[i] = Math.max(dp[i-1], dp[i-1] + prices[i]-prices[i-1]);
        }
        return dp[n-1];
    }
}

和贪心一样的思路,如果昨天的价格比今天低,那就可以卖了,然后如果明天价格比今天还高,那么今天再买。

 

总体来说今天的题都很简单,都是用dp来实现贪心的思想,加油。

posted @ 2022-11-30 16:15  小猫Soda  阅读(17)  评论(0)    收藏  举报