贪心算法 part 02
贪心算法
● 122.买卖股票的最佳时机II
● 55. 跳跃游戏
● 45.跳跃游戏II
122.买卖股票的最佳时机II
法1:贪心
int maxProfit(vector<int>& prices) {
int ans = 0;
for (int i = 1; i < prices.size(); ++i) {
ans += max((prices[i] -prices[i-1]) , 0);
}
return ans;
}
55. 跳跃游戏
55. 跳跃游戏
法1:贪心
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
法1:贪心
//所以真正解题的时候,要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,
// 以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最小步数
int jump(vector<int>& nums) {
if (nums.size() == 1)return 0;
int ans = 0;
int cur_dis = 0;
int next_dis = 0;
for (int i = 0; i < nums.size(); ++i) {
next_dis =max(nums[i] + i, next_dis);
if (i == cur_dis){
if (cur_dis < nums.size() - 1){
ans++;
cur_dis = next_dis;
if (next_dis >= nums.size() - 1)break;
}else break;
}
}
return ans;
}