今天开始贪心算法了!
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
贪心算法一般分为如下四步:
- 将问题分解为若干个子问题
- 找出适合的贪心策略
- 求解每一个子问题的最优解
- 将局部最优解堆叠成全局最优解
455. 分发饼干
这里的思路就是用尺寸最大的蛋糕 优先满足胃口最大的孩子 为了避免尺寸浪费。所以这里分别对孩子数组和饼干数组进行排序,然后倒序遍历
以for循环去遍历孩子数组,index代表饼干数组最大尺寸的饼干,如果当前s[index] >=g[i]的话,那么饼干数组就继续往前走,并且孩子数组也在往前遍历。
代码:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort() # 将孩子的贪心因子排序
s.sort() # 将饼干的尺寸排序
index = len(s) - 1 # 饼干数组的下标,从最后一个饼干开始
result = 0 # 满足孩子的数量
for i in range(len(g)-1, -1, -1): # 遍历胃口,从最后一个孩子开始
if index >= 0 and s[index] >= g[i]: # 遍历饼干
result += 1
index -= 1
return result
376. 摆动序列
思路:这道题啊 不太会