贪心算法理论基础

一、455 分发饼干

//大饼干满足大胃口
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(),g.end());
sort(s.begin(),s.end());
int result = 0;//收集结果
int index = s.size()-1;//指向饼干下标的指针
for(int i=g.size()-1;i>=0;i--){
if(index>=0&&s[index]>=g[i]){
result++;
index--;
}
}
return result;
}
};
//小饼干满足小胃口
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(),g.end());//胃口
sort(s.begin(),s.end());//饼干
int index = 0;//指向胃口的下标
for(int i=0;i<s.size();i++){
if(index<g.size()&&g[index]<=s[i]){
index++;
}
}
return index;
}
};
二、376 摆动序列

class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int prediff = 0;
int curdiff = 0;
int result = 1;//默认最右边有摆动
if(nums.size() == 1)
return 1;
for(int i=0;i<nums.size()-1;i++){
curdiff = nums[i+1] - nums[i];
if(prediff>=0&&curdiff<0||prediff<=0&&curdiff>0)
{
result++;
prediff = curdiff;
}
}
return result;
}
};
三、53 最大子序和

class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT_MIN;//保存最大和
int count = 0;//记录连续和
for(int i=0;i<nums.size();i++){
count += nums[i];
if(count>result)
result = count;
if(count<0)
count = 0;
}
return result;
}
};