day27 第八章 贪心算法 part01
455.分发饼干
排序,以饼干为中心,从大到小算
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int index = s.size()-1;
int count = 0;
for(int i=g.size()-1; i>=0; i--){
if(index>=0 && s[index]>=g[i]){
count++;
index--;
}
}
return count;
}
};
376. 摆动序列
山峰山谷,用贪心时间复杂度O(N),prediff>=0/<=0是为了把0引入,开始计算,不然后面没法算。
class Solution {
public:
// 山峰山谷
int wiggleMaxLength(vector<int>& nums) {
if(nums.size()<=1){
return nums.size();
}
int prediff = 0;
int curdiff = 0;
int result = 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. 最大子序和
前面所有的最大和如果<0, 只能给后面带来降低,所以舍弃,从0开始。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT32_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;
}
};