代码随想录刷题03.13
贪心算法2
LeetCode题目
解题思路
本题(贪心算法)思路:
1)只有一个股价数组,数组中的元素就是利用for循环制造的单体个例;
2)局部最优思路:股价隔天相减,只收集其中的正收益(累加后得到全局收益)。
代码过程
class Solution {
public:
int result=0;
int maxProfit(vector<int>& prices) {
for(int i=1;i<prices.size();i++)
{
result+=max(0,prices[i]-prices[i-1]);
}
return result;
}
};
LeetCode题目
解题思路
1.本题的贪心思路:
1)本题的个例单体:数组中的元素;
2)本题的局部最优:每个元素取最大跳跃步数(取最大覆盖范围);
3)整体优解:最大覆盖范围达到或超过最后一个元素的位置。
**注意:**贪心算法只是一种思维,不是具体的解题方法,具体的解题方法会有很多的细节需要打磨。
代码过程
class Solution {
public:
bool canJump(vector<int>& nums) {
if(nums.size()<=1)return true;
int cover=nums[0];
for(int i=0;i<=cover;i++)
{
cover=max(i+nums[i],cover);
cout<<cover<<" ";
if(cover>=(nums.size()-1))return true;
}
return false;
}
};
LeetCode题目
解题思路
1.if语句在for循环语句中可以起到一个断点定位判断的作用。
2.分析代码时,要找关键语句分析这是一个怎么样的数据变化场景。本题的关键语句是:
for(int i=0;i<nums.size();i++)
nextdistance=max(nextdistance,nums[i]+i);
代码过程
class Solution {
public:
int jump(vector<int>& nums) {
int curdistance=0;
int nextdistance=0;
int result=0;
for(int i=0;i<nums.size();i++)
{
nextdistance=max(nextdistance,nums[i]+i);
if(i==curdistance){
if(curdistance<nums.size()-1){
result++;
curdistance=nextdistance;
if (nextdistance >= nums.size() - 1) break;
}else break;
}
}
return result;
}
};