455.分发饼干
class Solution {
//贪心算法没有固定的逻辑,就是想一个局部最优的解决办法,他可以推出全局最优,并且想不出反例,就用它试一下。
public:
//这里采用小饼干先喂饱小胃口孩子。
int findContentChildren(vector<int>& g, vector<int>& s) {
//先将两个数组排序
sort(g.begin(),g.end());
sort(s.begin(),s.end());
//从小到大,遍历每个饼干,只要他们能满足一个孩子,就让结果+1
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) {
if (nums.size() <= 1) return nums.size();
int curDiff = 0; // 当前一对差值
int preDiff = 0; // 前一对差值
int result = 1; // 记录峰值个数,序列默认序列最右边有一个峰值
for (int i = 0; i < nums.size() - 1; i++) {
curDiff = nums[i + 1] - nums[i];//差值
// 出现峰值
if ((curDiff > 0 && preDiff <= 0) || (preDiff >= 0 && curDiff < 0)) {
result++;//记录
preDiff = curDiff;
}
}
return result;
}
};
53. 最大子序和
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT32_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;
}
};