代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机 55.跳跃游戏 45.跳跃游戏II

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

题目链接 文章讲解 视频讲解

思路:
每次记录当天的股票价格,如果下一天比今天的价钱高那么今天就买,这样保证每一次买股票都是赚的
否则记录下一天的股票,因为下一天的股票比今天的便宜,下一天买比今天买划算

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.size() <= 1) return 0;
        // 记录当天的股价
        int cur = prices[0];
        int profit = 0;
        for(int i = 1; i < prices.size(); ++i) {
            // 如果能赚则买入
            if(prices[i] > cur) profit = profit + prices[i] - cur;
            // 否则将当前股价更新为下一天的股价
            cur = prices[i];
        }
        return profit;
    }
};

55.跳跃游戏

题目链接 文章讲解 视频讲解

方法一

如果下一跳比当前值大则更新为下一跳的值
每次循环跳数减一,最后能够到达数组组后一个元素返回true,否则返回false

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int pre = nums[0];
        if(pre == 0 && nums.size() != 1) return false;
        for(int i = 1; i < nums.size(); ++i) {
            if(--pre < nums[i]) pre = nums[i];
            if(pre == 0 && i != nums.size() - 1) return false;
        }
        
        return true;
    }
};

方法二

如果当前覆盖范围加上当前位置能够覆盖整个数组则返回true,否则返回false

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int cover = 0;
        if(nums.size() == 1) return false;
        for(int i = 0; i <= cover; ++i) {
            cover = max(cover, nums[i] + i);
            if(cover >= nums.size() - 1) return true;
        }
        
        return false;
    }
};

45.跳跃游戏II

题目链接 文章讲解 视频讲解

思路:cover记录当前覆盖范围,maxCover记录最大覆盖范围
   每当i到达当前范围时,将cover更新为maxCover,步数加一
   如果当前范围覆盖到数组最后一个元素,结束返回步数

class Solution {
public:
    int jump(vector<int>& nums) {
        if(nums.size() == 1) return 0;
        int cover = 0;
        int maxCover = 0;
        int times = 0;
        for(int i = 0; i < nums.size(); ++i) {
            maxCover = max(maxCover, nums[i] + i);
            if(i == cover) {
                cover = maxCover;
                times++;
            }
            if(cover >= nums.size() - 1) break;
        }
        return times;
    }
};
posted @ 2024-06-08 21:42  深蓝von  阅读(2)  评论(0编辑  收藏  举报