【力扣一刷】代码随想录day32(贪心算法part2:122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II )-122.买卖股票的最佳时机II中等题(偏简单)

方法一  贪心算法

思路:

1、局部最优:截止到当天能赚到的最大利润

2、全局最优:截止到最后一天能赚到的最大利润就是全局最大利润

例子:上升就是赚钱机会,贪心地将每个赚钱机会把握住,获取赚到的钱的总和即可

class Solution {
    public int maxProfit(int[] prices) {
        int res = 0;
        for (int i = 0; i < prices.length - 1; i++){
            int delta = prices[i + 1] - prices[i];
            if (delta > 0) res += delta; // 贪心算法,不放过截止到现在的所有赚钱机会
        }
        return res;
    }
}
  • 时间复杂度: O(n),for循环遍历一次数组
  • 空间复杂度: O(1),没有额外的空间开销

方法二  动态规划

思路:

1、确定dp[i]的含义:截止到第i天赚到的最多的钱

2、确定递推关系:dp[i] = dp[i-1] + today

3、确定初始值:第一天赚到的最多的钱肯定是0,即dp[0] = 0

class Solution {
    public int maxProfit(int[] prices) {
        int dp = 0;
        for (int i = 1; i < prices.length; i++){
            // 今天之前赚到的最多的钱 + 今天当天赚到最多的钱 = 包括今天在内已经赚到的最多的钱
            int today = prices[i] - prices[i-1] > 0 ? prices[i] - prices[i-1] : 0;
            dp += today;
        }
        return dp;
    }
}
  • 时间复杂度: O(n),for循环遍历一次数组
  • 空间复杂度: O(1),dp[i]只与dp[i-1]有关,只用一个变量记录值即可


上一篇:20240408通过win32diskimager给TF卡写入Ubuntu Core 16.04


下一篇:什么是物理服务器?