122.买卖股票的最佳时机II
文档讲解:代码随想录.买卖股票的最佳时机II
视频讲解:贪心算法也能解决股票问题!LeetCode:122.买卖股票最佳时机II
状态:已完成
代码实现
class Solution {
public:
int maxProfit(vector<int>& prices) {
int result = 0;
for (int i = 1; i < prices.size(); i++) {
result += max(prices[i] - prices[i - 1], 0);
}
return result;
}
};
心得体会
- 从贪心的角度,确实非常精巧
55. 跳跃游戏
文档讲解:代码随想录.跳跃游戏
视频讲解:贪心算法,怎么跳跃不重要,关键在覆盖范围 | LeetCode: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
cover = max(i+nums[i],cover);
if(cover>= nums.size()-1){//确保覆盖完了如果 cover 大于等于了终点下标,直接 return true 就可以了。
return true;
}
}
return false;
}
};
心得体会
- 需要注意每次都是再可覆盖范围内进行跳跃的
45.跳跃游戏II
文档讲解:代码随想录.跳跃游戏II
视频讲解:贪心算法,最少跳几步还得看覆盖范围 | LeetCode: 45.跳跃游戏II
状态:已完成
代码实现
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size()==1){
return 0;
}
int cur_dis = 0;
int next_dis = 0;
int ans =0;
for(int i = 0; i < nums.size();i++){
next_dis = max(i+nums[i],next_dis);
if(i == cur_dis){
cur_dis = next_dis;
ans++;
if(cur_dis>= nums.size()-1){
break;
}
}
}
return ans;
}
};
心得体会
- 这里需要注意的是步数实在什么时候进行更新的
1005.K次取反后最大化的数组和
文档讲解:代码随想录.K次取反后最大化的数组和
视频讲解:贪心算法,这不就是常识?还能叫贪心?LeetCode:1005.K次取反后最大化的数组和
状态:已完成
class Solution {
static bool cmp(int a, int b) {
return abs(a) > abs(b);
}
public:
int largestSumAfterKNegations(vector<int>& A, int K) {
sort(A.begin(), A.end(), cmp); // 第一步
for (int i = 0; i < A.size(); i++) { // 第二步
if (A[i] < 0 && K > 0) {
A[i] *= -1;
K--;
}
}
if (K % 2 == 1) A[A.size() - 1] *= -1; // 第三步
int result = 0;
for (int a : A) result += a; // 第四步
return result;
}
};
心得体会
- 思路有些绕