前言
LeetCode题目:LeetCode 455、376、53
Takeaway:贪心算法
一、455
分饼干问题,最基础的贪心算法问题,贪心的原理是把大的饼干给胃口大的孩子,这样不会浪费。
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
int ans = 0;
int j = g.size()-1;
sort(g.begin(), g.end());
sort(s.begin(), s.end());
for(int i=s.size()-1; i>=0; i--){
while(j>=0 && g[j]>s[i]){
j--;
}
if(i>=0 && j>=0 && g[j]<=s[i]){
ans++;
j--;
}
}
return ans;
}
};
二、376
摆动序列问题,实际贪心逻辑是:去掉单调路径上的节点。
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if(nums.size()<=1){
return nums.size();
}
int ans = 1;
int flag_old = 0;
int flag_new = 0;
for(int i=0;i<nums.size()-1;i++) {
flag_new = nums[i+1] - nums[i];
if((flag_new>0 && flag_old<=0) || (flag_new<0 && flag_old>=0)){
ans++;
flag_old = flag_new;
}
}
return ans;
}
};
三、53
最大子数组和,贪心思路是:看当前加和是否大于0,不大于0那就可以直接跳过,大于0就可以考虑是否保留。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int count = 0;
int ans = INT32_MIN;
for(int i=0; i<nums.size(); i++){
count += nums[i];
if(count>ans){
ans = count;
}
if(count<=0){
count = 0;
}
}
return ans;
}
};
总结
贪心算法。