【LeetCode 刷题】贪心算法(1)-基础

此博客为《代码随想录》二叉树章节的学习笔记,主要内容为贪心算法基础的相关题目解析。

文章目录

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 > 0k 为奇数,则把最小的元素反转,反之则直接返回答案

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
  • 分类讨论,贪心准则为优先使用十元找零,之后再使用五元
相关推荐
小姚也要变强2 分钟前
sort排序 计数排序 map set C++ 蓝桥杯
开发语言·c++·算法·蓝桥杯
WBluuue13 分钟前
大一计算机的自学总结:数据结构设计相关题
数据结构·c++·算法·leetcode·链表
白白糖16 分钟前
Day 28 卡玛笔记
python·算法·力扣
Lx35224 分钟前
Pandas高级数据处理:数据流处理
后端·python·pandas
JNU freshman26 分钟前
蓝桥杯思维训练营(四)
算法·蓝桥杯
BingLin-Liu28 分钟前
蓝桥杯备考:前缀和算法之最大子段和
算法
AI量化投资实验室29 分钟前
celery策略回测任务运行及金融量化数据增量更新|年化18.8%,回撤8%的组合策略(python代码)
开发语言·python·金融
和风化雨31 分钟前
排序算法--归并排序
c语言·数据结构·c++·算法·排序算法
Doopny@1 小时前
统计满足条件的4位数(信息学奥赛一本通-1077)
算法
look_outs1 小时前
PyQt4学习笔记1】使用QWidget创建窗口
数据库·笔记·python·学习·pyqt