题目来源:. - 力扣(LeetCode)
题目思路分析
在这个问题中,我们有两个数组:g 和 s。g 数组表示每个孩子对饼干大小的需求,而 s 数组表示我们拥有的饼干的大小。目标是找出最多有多少孩子可以得到至少满足他们需求的饼干。
为了解决这个问题,我们可以采用贪心算法的思想。首先,对 g 和 s 数组进行排序,这样我们可以从最小的需求和最小的饼干开始匹配。然后,我们使用两个指针 gg 和 ss 分别遍历 g 和 s 数组。对于每个孩子,我们尝试找到一个满足他们需求的饼干。如果找到了,我们就增加满足孩子数量的计数器 ans,并继续为下一个孩子寻找饼干。
代码:
#include <vector>
#include <algorithm>
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
// 对孩子需求和饼干大小进行排序
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int ans = 0; // 满足孩子数量的计数器
// 使用两个指针分别遍历孩子需求和饼干大小
for (int gg = 0, ss = 0; ss < s.size() && gg < g.size(); ss++, gg++) {
// 尝试找到一个满足当前孩子需求的饼干
while (ss < s.size() && g[gg] > s[ss]) {
ss++; // 如果当前饼干不满足需求,移动到下一个饼干
}
// 如果找到了一个满足需求的饼干
if (ss < s.size()) {
ans++; // 增加满足孩子数量的计数器
}
}
return ans; // 返回满足孩子数量的结果
}
};
知识点摘要
- 贪心算法:贪心算法是一种在每一步选择中都采取最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。在这个问题中,我们每次都选择最小的饼干来满足当前孩子的需求。
- 排序:排序是计算机科学中的一个基本问题,它允许我们高效地查找、合并和比较数据。在这个问题中,我们对孩子需求和饼干大小进行了排序,以便能够使用贪心算法。
- 指针/迭代器:在C++中,指针和迭代器是用于遍历和操作容器(如数组、向量等)中的元素的工具。在这个问题中,我们使用两个指针来分别遍历孩子需求和饼干大小。
通过这个问题,我们学习了如何使用贪心算法来解决一个实际的匹配问题。我们首先对数据进行排序,然后使用两个指针来遍历数据并尝试找到匹配。这种方法不仅简单而且高效,因为它利用了排序后的数据的性质来减少不必要的比较和搜索。此外,我们还复习了排序、指针/迭代器等重要的计算机科学概念。希望这篇文章能够帮助你更好地理解这个问题和贪心算法的应用。
445



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



