122. 买卖股票的最佳时机 II
思路:
本题就是求解利润的最大值,所以如果相邻两天的利润是正数,则可以继续持有,若是负数则就应该舍弃,从下一个利润为正数的前一天买入。
代码:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res=0;
for(int i=1;i<prices.size();i++)
{
res+=max(prices[i]-prices[i-1],0);
}
return res;
}
};
55. 跳跃游戏
思路:
这道题可以将思路转变成覆盖范围能不能到达数组的末尾。假设某一位数组的值为m,这表示最多可以跳跃m步,计算跳的m步下一次跳跃能达到的最大范围,不断更新。
代码:
class Solution {
public:
bool canJump(vector<int>& nums) {
int count=0;
if(nums.size()==1) return true;
for(int i=0;i<=count;i++)
{
count=max(i+nums[i],count);
if(count>=nums.size()-1)return true;
}
return false;
}
};
45. 跳跃游戏 II
思路:
这道题可以用贪心算法解决,也就是在每次跳跃能覆盖的范围内取下一次跳跃能到达到的最大值。
代码:
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size()==1) return 0;
int cur=0;
int next=0;
int count=0;
for(int i=0;i<nums.size();i++)
{
next=max(i+nums[i],next);
if(i==cur)
{
if(cur<nums.size()-1)
{
count++;
cur=next;
if(next>=nums.size()-1)break;
}else break;
}
}
return count;
}
};