贪心算法
贪心算法是一种常用的算法设计策略,旨在通过局部最优选择来构建全局最优解。它的基本思想是:在每一步选择中,都选择当前看起来最优的选项,而不考虑后续的影响。贪心算法通常用于解决最优化问题,尤其是在某些特定条件下能够得到全局最优解的问题
1、分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。输入: g = [1,2,3], s = [1,1]: 输出: 1
贪心策略是,给剩余孩子里最小饥饿度的孩子分配最小的能饱腹的饼干:
C++双指针
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(),g.end());
sort(s.begin(),s.end());
int j=0;
for(int i=0;i<s.size();++i){
if (j<g.size()&&s[i]>=g[j])//满足条件的饼干,才能让饥饿度后移
{
j++;
}
}
return j;
}
};
python3
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort()
s.sort()
n=len(g)
i=0
for x in s:
if i<n and x>=g[i]:
i+=1
return i
2、分发糖果
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
肯定需要遍历,但是一次遍历考虑左右有些复杂化,可以从左到右和从右到左遍历,都是O(N)
C++
class Solution {
public:
int candy(vector<int>& ratings) {
int size = ratings.size();
if (size < 2) {
return size;
}
vector<int> num

最低0.47元/天 解锁文章
407

被折叠的 条评论
为什么被折叠?



