解释:贪心的本质是选择每一阶段的局部最优,从而达到全局最优
文章链接:代码随想录
视频链接:LeetCode: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--){ // i=2
// 如果满足则整体变化,不满足只有胃口减减 g[2]=3
if(Index>=0 && g[i]<=s[Index]){ // s[1]=1
Index--;
result++;
}
}
return result;
}
};
# 用小饼干去喂小胃口
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 = 0; //小孩的下标
// 饼干进行移动
for(int i=0; i<s.size(); i++){
if(Index<g.size() && s[i]>=g[Index]){
Index++;
result++;
}
}
return result;
}
};
文章链接:代码随想录
视频链接:LeetCode:376.摆动序列
题目链接:力扣题目链接
图释:
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if(nums.size()==1) return nums.size();
int result = 1; // 默认记录最后一个元素算摆动
int prediff = 0; // 前一个坡度
int curdiff = 0;
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;
}
};
文章链接:代码随想录
视频链接:LeetCode: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;
}
};