传统机器学习图像分类实战:小样本、低算力、高可解释性方案
2026/9/25 23:37:44
LeetCode 455 是一道非常经典的贪心入门题。
题目本身不复杂,但如果你第一次写,很容易陷入一种纠结:
其实这道题的核心只有一句话:
用最小的资源,优先满足最容易满足的人。
一旦想通这一点,代码就会变得非常干净,而且效率也很高。
你有两组数据:
g[i]:第i个孩子的胃口值(最小需要多大的饼干)s[j]:第j块饼干的尺寸规则很简单:
s[j] >= g[i],这个孩子才会满足你的目标不是让所有孩子都满足,而是:
尽可能多地满足孩子,返回最大数量
这道题的贪心策略其实非常直觉化:
先排序
用最小的饼干,去尝试满足胃口最小的孩子
如果当前饼干满足不了这个孩子,那它也一定满足不了胃口更大的孩子,直接丢弃
如果能满足,就计数 +1,同时换下一个孩子和下一块饼干
因为:
这和现实生活其实一模一样。
classSolution{funcfindContentChildren(_g:[Int],_s:[Int])->Int{// 1. 排序letchildren=g.sorted()letcookies=s.sorted()varchildIndex=0varcookieIndex=0varresult=0// 2. 双指针遍历whilechildIndex<children.count&&cookieIndex<cookies.count{ifcookies[cookieIndex]>=children[childIndex]{// 当前饼干可以满足当前孩子result+=1childIndex+=1cookieIndex+=1}else{// 饼干太小,换一块更大的cookieIndex+=1}}returnresult}}letchildren=g.sorted()letcookies=s.sorted()排序之后有两个好处:
如果不排序,你就很难保证当前的分配是“最省资源”的。
varchildIndex=0varcookieIndex=0这两个指针分别表示:
childIndex:当前要尝试满足的孩子cookieIndex:当前拿来用的饼干指针只往前走,不回退,这也是贪心算法的典型特征。
ifcookies[cookieIndex]>=children[childIndex]这里有个非常重要但容易忽略的点:
如果当前饼干满足不了当前孩子,那它一定满足不了后面的孩子。
因为:
letsolution=Solution()print(solution.findContentChildren([1,2,3],[1,1]))输出:
1解释过程:
print(solution.findContentChildren([1,2],[1,2,3]))输出:
2解释过程:
print(solution.findContentChildren([2,3,4],[1,2,3]))结果:
2解释:
这道题的思路在真实世界中非常常见。
本质都是:
用有限资源,尽量满足更多请求
比如:
如果你反过来分配,很容易“浪费能力”。
这道题经常被用来考:
O(n log n)O(n)整体时间复杂度:
O(n log n)空间复杂度:
O(1)(忽略排序带来的额外空间)LeetCode 455 是一道非常值得反复体会的贪心题:
如果你能把这道题讲清楚,说明你已经不只是“刷题”,而是在真正理解算法的决策逻辑。