开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
1、写在前面
大家好,这里是【LeetCode刷题日志】。今天的题分别是:
- 跳跃游戏
- 跳跃游戏 II
- 买卖股票的最佳时机 II
2、内容
2.1、题目一:跳跃游戏
(1) 描述
(2) 举例
(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
(1) 描述
(2) 举例
(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) 描述
(2) 举例
(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、写在最后
好的,今天就先刷到这里。