122. 买卖股票的最佳时机 II
thought:
时刻保持最优是本题的关键,后一天减前一天的差值是利润产生的核心,因此当差值大于0时计入res中
完整C++代码如下:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int len=prices.size();
int now=prices[0];
int sum=0;
for(int i=1;i<len;i++){
if(now<prices[i]){
sum+=prices[i]-now;
}
now=prices[i];
}
return sum;
}
};
55. 跳跃游戏
链接:55. 跳跃游戏
thought:
假设nums[0]为3,说明可以跳1,2,3步,究竟选择哪一步并不重要,但明确此时的最大跳跃范围很重要,之后不断延申最大范围,若范围能覆盖最后一位,则成立
完整C++代码如下:
class Solution {
public:
bool canJump(vector<int>& nums) {
int cover = 0;
int
if (nums.size() == 1) return true;
for (int i = 0; i <= cover; i++) { // 注意这里是小于等于cover
cover = max(i + nums[i], cover);
if (cover >= nums.size() - 1) return true;
}
return false;
}
};
45. 跳跃游戏 II
链接:45. 跳跃游戏 II
thought:
每一轮我们都要跳一次,可以得到一次当前的最大范围,计数一次,当i走完此时的最大范围,得到一个新的最大范围,再计数一次,直到覆盖到最后一个数
完整C++代码如下:
class Solution {
public:
int jump(vector<int>& nums) {
int cover = 0;
int count=0;
int Maxcover;
if(nums.size()==1)return 0;
for (int i = 0; i <= cover; i++) {
Maxcover = max(i + nums[i], Maxcover);
if(i==cover){
cover=Maxcover;
count++;
}
if (cover >= nums.size() - 1) return count;
}
return 0;
}
};