代码随想录算法训练营第三十一天| 455.分发饼干、376.摆动序列、53.最大子序和
455.分发饼干
题目链接:455. 分发饼干
贪心策略:每次将最大的饼干分给能最大的满足胃口的孩子
class Solution {
public:
int findContentChildren(std::vector<int>& g, std::vector<int>& s) {
int ans = 0;
int index = s.size()-1;
std::sort(s.begin(),s.end());
std::sort(g.begin(),g.end());
for(int i = g.size()-1;i>=0;i--){
if(index>=s.size()) break;
if(s[index] >= g[i]) {
ans++;
index--;
}
}
return ans;
}
};
376. 摆动序列
题目链接:376. 摆动序列
贪心策略:波峰尽量高,波谷尽量低
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if(nums.size()<=1) return nums.size();
int ans = 1;
int curVal = 0;
int preVal = 0;
for(int i = 0;i<nums.size()-1;i++){
curVal = nums[i+1] - nums[i];
if((preVal>=0 && curVal<0)||(preVal<=0 && curVal>0)) {
ans++;
preVal = curVal;
}
}
return ans;
}
};
53. 最大子序和
题目链接:53. 最大子数组和 - 力扣(LeetCode)
贪心策略:维护一个非负的 连续和。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int numMax = INT_MIN;
int curSum = 0;
for(int i = 0;i<nums.size();i++){
curSum+=nums[i];
if(curSum > numMax) numMax = curSum;
if( curSum <= 0) curSum = 0;
}
return numMax;
}
};