122.买卖股票的最佳时机II
题目:力扣
class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<int> get(prices.size() - 1);
for(int i = 1 ; i < prices.size(); i++){
get[i-1] = prices[i] - prices[i-1];//计算每两天的差值
}
int ans = 0;
for(int i = 0 ; i < get.size(); ++i){
if(get[i] > 0){
ans += get[i];//所有正收益相加
}
}
return ans;
}
};
55. 跳跃游戏
题目:力扣
class Solution {
public:
bool canJump(vector<int>& nums) {
int cover = 0; //覆盖范围
if(nums.size() == 1) return true;
for(int i = 0; i <= cover; ++i){
cover = max(i + nums[i], cover);
if(cover >= nums.size() - 1) return true;
}
return false;
}
};
45.跳跃游戏II
题目:力扣
class Solution {
public:
int jump(vector<int>& nums) {
//if(nums.size() == 1) return 0; //下面的条件已经包含了对于一步的处理
int cover = 0;
int next_cover = 0;
int ans = 0;
for(int i = 0 ; i < nums.size(); ++i ){
next_cover = max(next_cover,i + nums[i]);
if(i == cover){
if(cover != nums.size() - 1){
ans++;
cover = next_cover;
if(cover >= nums.size() - 1) break;
}
else{
break;
}
}
}
return ans;
}
};
总结
题型:贪心算法
技巧:
1: 把一整段的收益拆分成每一个段的收益和来看
2:把每一步的覆盖区间作为更新目标
3:确认好更新答案的条件