代码随想录day32 | 122.买卖股票的最佳时机II 55. 跳跃游戏 45. 跳跃游戏 II

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

题目|文章
image

思路

因为每天都可以将股票买入和卖出,因此,我们可以将买卖时机进行分解。
局部最优:如果当天的利润为正,则加入,如果当天利润为负,则不加入。
整体最优:所有天数的利润综合最大

实现

点击查看代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
       int  result = 0;
       for(int i = 1; i < prices.size(); i++) {
           if(prices[i] > prices[i-1]) {
               result += prices[i] - prices[i-1];
           }
       } 
       return result;
    }
};

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

55. 跳跃游戏

题目|文章
image

思路

如果当前位置为3,到底一次跳到1,2还是3并不重要,重要的是当前位置以及之前位置所能跳跃到的最大的位置。
我们需要记录一个值max记录当前以及之前的跳跃所能覆盖的范围,如果max包括当前的位置,那么可以进行跳跃。当最大值大于max值时,对max进行更新。如果覆盖的范围包括最后一个值的位置,那么就能到达最远的位置。

实现

点击查看代码
class Solution {
public:
    bool canJump(vector<int>& nums) {
        
        int max = 0;
        int cur = 0;
        for(int i = 0; i < nums.size(); i++) {
            if(max >= i) {
                cur = i + nums[i];
                max = max > cur ? max : cur;
            }
            //cout<< max << endl;
        }
        return max >= nums.size()-1;
    }
};

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

45. 跳跃游戏 II

题目|文章
image

思路

当当前的值为3时,我们不需要知道跳1,2还是3步,需要知道的是每一步可以到达的最远的位置。以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最小步数。
相比于44题,这道题需要知道下一步的最远位置来对这一步的最远位置进行更新。

  • 当到达当前最远位置时,如果不是终点继续更新
  • 如果是终点,那么直接返回,不需要继续更新。

实现

点击查看代码
class Solution {
public:
    int jump(vector<int>& nums) {
        if(nums.size() <= 1) return 0;
        int result = 0;
        int curdistance = 0;
        int nextdistance = 0;
        for(int i = 0; i < nums.size(); i++) {
            nextdistance = max(nextdistance, nums[i] + i);
            if(i == curdistance) {
                if(curdistance != nums.size()-1) {
                    result++;
                    curdistance = nextdistance;
                }
            }
           
        }    
        return result;
    }
};

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
posted @   缩地  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示