122.买卖股票的最佳时机II
思路: 本题题意中所说只有一只股,并且不能多次购买,只能卖出再买。那就可以计算出每两天的利润,只取利润为正的部分,即可求出最大利润。
class Solution {
public:
int maxProfit(vector<int>& price
int result = 0;
for(int i=1;i<prices.size();i++){
result += max(prices[i]-prices[i-1],0);
}
return result;
}
};
55. 跳跃游戏
思路: 要达到终点,那么需要步数能大于等于数组大小。数组每个位置的数值代表他能走的范围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;
}
};
45.跳跃游戏II
思路: 本题与上一题不同之处在于求最少步数,那就意味着每一步要走最大值。因此每一步要尽可能多走,如果没有到达终点,就得步数+1,继续向前走。因此,统计当前步数的覆盖范围和下一步的覆盖范围,达到终点便可以得出步数。
class Solution {
public:
int jump(vector<int>& nums) {
int curDistance = 0;
int ans = 0;
int nextDistance = 0;
for (int i = 0; i < nums.size() - 1; i++) {
nextDistance = max(nums[i] + i, nextDistance);
if (i == curDistance) {
curDistance = nextDistance;
ans++;
}
}
return ans;
}
};