贪心算法——C++实现中级案例
贪心算法是一种常用的优化算法,通常用于解决最优化问题。在贪心算法中,我们每次都选择当前状态下最优决策,然后更新状态,直到达到最终状态。本文将介绍几个经典的贪心算法案例,并给出C++代码实现。
- 分糖果问题
有m个孩子和n个糖果,每个孩子有对应的贪婪值g_i和每个糖果有对应的大小s_i。要求将糖果分配给孩子,使得满足以下条件:
- 每个孩子只能分配一个糖果;
- 每个孩子i只能分配大小不小于他的贪婪值g_i的糖果。
求最多能满足多少个孩子。
C++代码如下:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int i = 0, j = 0; // i表示孩子编号,j表示糖果编号
while (i < g.size() && j < s.size()) {
if (g[i] <= s[j]) { // 能够满足孩子则继续寻找下一个孩子和糖果
i++;
j++;
} else { // 不能满足孩子,则尝试用更大的糖果来满足当前孩子
j++;
}
}
return i;
}
- 任