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;
}
};
思路:贪心 分割每天的利润形成size-1的数组选取正利润进行拼接
class Solution {
public:
//设置最大的跳跃长度 max 每次前进一个单位更新最大跳跃长度
bool canJump(vector<int>& nums) {
if(nums.size()==1)
return true;
int Max=nums[0];
int i=0;
while(i<nums.size()){
if(i+Max>=nums.size()-1)
return true;
if(Max>0){
i++;
Max--;
Max=max(Max,nums[i]);
}
else{
return false;
}
}
return false;
}
};
max代表当前坐标下的最大移动距离
class Solution {
public:
int jump(vector<int>& nums) {
if (nums.size() == 1) return 0;
int curDistance = 0; // 当前覆盖最远距离下标
int ans = 0; // 记录走的最大步数
int nextDistance = 0; // 下一步覆盖最远距离下标
for (int i = 0; i < nums.size(); i++) {
nextDistance = max(nums[i] + i, nextDistance); // 更新下一步覆盖最远距离下标
if (i == curDistance) { // 遇到当前覆盖最远距离下标
ans++; // 需要走下一步
curDistance = nextDistance; // 更新当前覆盖最远距离下标(相当于加油了)
if (nextDistance >= nums.size() - 1) break; // 当前覆盖最远距到达集合终点,不用做ans++操作了,直接结束
}
}
return ans;
}
};