【LeetCode刷题日志】:跳跃游戏、跳跃游戏 II、买卖股票的最佳时机 II

92 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

1、写在前面

大家好,这里是【LeetCode刷题日志】。今天的题分别是:

  • 跳跃游戏
  • 跳跃游戏 II
  • 买卖股票的最佳时机 II

2、内容

2.1、题目一:跳跃游戏

链接:55. 跳跃游戏 - 力扣(LeetCode)

(1) 描述

image.png

(2) 举例

image.png

(3) 解题

class Solution {
public:
    bool canJump(vector<int>& nums) {
        // 特殊情况处理
        if (nums.size() == 1) {
            return true;
        }
        int index = 0;  // 表示最大覆盖范围
        for (int i = 0; i <= index; i++) {
            // 每移动一个位置,就更新跳跃步数,取得最大覆盖范围index
            index = max(i + nums[i], index);
            // 如果最大覆盖范围大于数组尾部下标,则表明能够到达最后一个位置
            if (index >= nums.size() - 1) return true; 
        }
        // 如果不能到达最后一个位置,则返回false
        return false;
    }
};

2.2、题目二:跳跃游戏 II

链接:45. 跳跃游戏 II - 力扣(LeetCode)

(1) 描述

image.png

(2) 举例

image.png

(3) 解题

class Solution {
public:
    int jump(vector<int>& nums) {
        int steps = 0;          // 记录所用的最大步数
        int border = 0;         // 记录当前能跳跃到的最远边界的下标
        int nextDistance = 0;    // 记录在边界border内,能够跳跃的最远位置的下标
        // 遍历数组(注意这里是小于nums.size()-1)
        for(int i=0; i < nums.size()-1; i++){
            // 每走一步,就更新下一步能覆盖的最远距离下标
            nextDistance = max(nextDistance, nums[i]+i);
            // 如果走到了边界,则必须要跳了
            if(i == border){
                border = nextDistance;  // 更新当前跳跃的最远距离下标
                steps++;                // 步数加 1
            }
        }
        return steps;       // 返回结果
    }
};

2.3、题目三:买卖股票的最佳时机 II

链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)

(1) 描述

image.png

(2) 举例

image.png

image.png

image.png

(3) 解题

参考代码:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int Profit = 0;
        for (int i = 1; i < prices.size(); i++) {
            int m = prices[i];
            int n =  prices[i-1];
            Profit += max( m-n, 0 );
        }
        return Profit;
    }
};

3、写在最后

好的,今天就先刷到这里。