此博客为《代码随想录》二叉树章节的学习笔记,主要内容为贪心算法基础的相关题目解析。
文章目录
455.分发饼干
python
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort()
s.sort()
i = 0
for x in s:
if i < len(g) and g[i] <= x:
i += 1
return i
- 饼干和胃口数组都从小到大排序,最小的饼干应该给当前满足的胃口最小的孩子,如果不给则会浪费分发机会,无法取得最优解
- 指针
i
标识当前满足到第i
个孩子;完整遍历饼干列表,按照孩子胃口从小到达依次尝试去满足,最后直接返回i
即为已经满足的孩子数量
1005.K次取反后最大化的数组和
python
class Solution:
def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
nums.sort()
min_num, res = +inf, 0
for num in nums:
min_num = min(min_num, abs(num))
if num < 0 and k > 0:
res -= num
k -= 1
else:
res += num
if k and k % 2 != 0:
return res - 2 * min_num
else:
return res
- 首先把负数从小到大仅可能反转为正数,如果反转所有负数后
k > 0
,则后序反转只针对最小的元素 - 在遍历过程中反转负数同时记录最小元素,如果遍历结束后
k > 0
且k
为奇数,则把最小的元素反转,反之则直接返回答案
860.柠檬水找零
python
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
five = ten = 0
for b in bills:
if b == 5:
five += 1
elif b == 10:
five -= 1
ten += 1
else:
if ten:
ten -= 1
five -= 1
else:
five -= 3
if five < 0:
return False
return True
- 分类讨论,贪心准则为优先使用十元找零,之后再使用五元