● 122.买卖股票的最佳时机II
只要有利润就收集,因为利润是可以分解的,我们在上坡的时候收集了利润其实相当于收集了波峰和波谷的利润差。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int index=0;
int result=0;
for(int i=0;i<prices.size()-1;i++)
{
if(prices[i]<prices[i+1])
{
result+=prices[i+1]-prices[i];
}
}
return result;
}
};
● 55. 跳跃游戏
这个题的思路其实特别巧妙,我们只需要考虑最大覆盖情况是否能够大于数组的最后一个下标就好了!所以我们在可移动范围内每次贪心出最大范围并更新。注意考虑数组大小为1的情况!
class Solution {
public:
bool canJump(vector<int>& nums) {
int range=0;
if(nums.size()==1)
return true;
for(int i=0;i<nums.size()-1;i++)
{
if(range<nums[i]+i&&i<=range)
range=nums[i]+i;
if(range>=nums.size()-1)
return true;
}
return false;
}
};
● 45.跳跃游戏II
要考虑的是每一步跳跃都能使得下一步的覆盖面积最大,这样的话就可以尽可能的更快接触到终点。
class Solution {
public:
int jump(vector<int>& nums) {
int currange=0;
int nextrange=0;
int result=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]+i>nextrange)
nextrange=nums[i]+i;
if(i==currange)
{
if(i==nums.size()-1)
return result;
else
if(nextrange>=nums.size())
return result+1;
result++;
currange=nextrange;
}
}
return result;
}
};