文档链接:https://programmercarl.com/
LeetCode455.分发饼干
题目链接:https://leetcode.cn/problems/assign-cookies/
思路:我采用的是优先用小饼干喂小孩。
贪心:
class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {int count = 0;sort(g.begin(), g.end());sort(s.begin(), s.end());int i = 0;int j = 0;while(i < s.size() && j < g.size()) {if(s[i] >= g[j]) {count++;i++;j++;} else {i++;}}return count;}
};
LeetCode376.摆动序列
题目链接:https://leetcode.cn/problems/wiggle-subsequence/
思路:没太明白
贪心:
class Solution {
public:int wiggleMaxLength(vector<int>& nums) {if(nums.size() == 1) return 1;int prediff = 0;int curdiff = 0;int result = 1;for(int i = 0; i < nums.size() - 1; i++) {curdiff = nums[i] - nums[i + 1];if((prediff >= 0 && curdiff < 0) || (prediff <= 0 && curdiff > 0)) {result++;prediff = curdiff;}}return result;}
};
LeetCode53.最大子数和
题目链接:https://leetcode.cn/problems/maximum-subarray/
思路:遇到连续和为负数的情况就舍去,因为负数只会让后面加的数变小,但不是遇到负数就舍去,而是连续和。同时注意存一下每一次的最大值。
贪心:
class Solution {
public:int maxSubArray(vector<int>& nums) {int result = INT_MIN;int sum = 0;for(int i = 0; i < nums.size(); i++) {sum += nums[i];if(sum > result) result = sum;if(sum < 0) sum = 0;}return result;}
};
总结:贪心真的好难,我原本以为的不就是每次取最优吗?不就是局部最优推出全局最优吗?结果拿到题目根本不知道什么是局部最优?什么是全局最优?