121
这道题的思路是贪心:题目的意思是只买卖一次股票,买卖不能是同一天。遍历过程中更新买入价格的最小值、利润的最大值,这样就可以保证卖出一定是在买入后面。
55
这道题的思路是不断更新能到达的最长范围,如果最长范围大于等于数组长度,那么就可以到达终点,否则不能。在每一个点处如何去更新最长范围?用len当作最长范围,一开始len是当前节点的值。以len作为for循环的终止条件,这个len可以在便利的时候不断更新。
class Solution {
public:
bool canJump(vector<int>& nums) {
int len=0;
for(int i=0;i<=len;i++)
{
len=max(len,nums[i]+i);
if(len>=nums.size()-1) return true;
}
return false;
}
};
45
这道题的思路是为了获得最少的跳跃步数,每一步都跳的最大,每一步最大又是由上一步在它的范围内遍历得到。
class Solution {
public:
int jump(vector<int>& nums) {
int ans=0;
int current=0;
int next=0;
if (nums.size() == 1) return 0;
for(int i=0;i<nums.size();i++)
{
next=max(next,nums[i]+i);
if(i==current)
{
ans++;
current=next;
if(next>=nums.size()-1) break;
}
}
return ans;
}
};