Leetcode 122.买卖股票的最佳时机II
题目链接:122.买卖股票的最佳时机II
解题思路:我们去贪心求每天的正利润即可,负利润丢掉;整个区间每天的正利润加在一起就是总利润了
class Solution {
public:
int maxProfit(vector<int>& prices) {
int result = 0;
for(int i = 0; i < prices.size() - 1; i++) {
result += max(prices[i + 1] - prices[i], 0);
}
return result;
}
};
Leetcode 55.跳跃游戏
题目链接:55.跳跃游戏
解题思路:我们使用cover去做一个能否到达终点的指标;如果我们使用数组+i等方式的话有可能会得很麻烦去思考到底要跳多少步;而cover就可以去解决。
class Solution {
public:
bool canJump(vector<int>& nums) {
int cover = 0;
if(nums.size() == 1) return true;
for(int i = 0; i <= cover; i++) {
cover = max(i + nums[i], cover);
if(cover >= nums.size() - 1) return true;
}
return false;
}
};
Leetcode 45.跳跃游戏II
题目链接:45.跳跃游戏II
解题思路:用当前cover和下一个cover去计算最少跳几步;如果当前的cover走完了也没有到达终点那么就计算多跳一步并切换成下一个cover; 这样就不用纠结数组跳几步的问题;只需要考虑cover是否到终点即可
class Solution {
public:
int jump(vector<int>& nums) {
int cover = 0, count = 0;
int next = -0x3f3f3f3f, cur = 0;
for(int i = 0; i < nums.size(); i++) {
next = max(next, i + nums[i]);
if(i == cur) {
if(cur != nums.size() - 1) {
count++;
cur = next;
if(cur >= nums.size() - 1) break;
} else break;
}
}
return count;
}
};