首页 > 编程语言 >吴师兄学算法day08 贪心 LC455. 分发饼干

吴师兄学算法day08 贪心 LC455. 分发饼干

时间:2024-01-18 23:11:48浏览次数:33  
标签:day08 饼干 int 孩子 胃口 LC455 cookie child 贪心

题目:

455. 分发饼干

易错点:

  • 这两个变量名容易弄混
  • s是饼干
  • g是胃口

图示:

我的代码:

class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        # 对饼干s排序
        s.sort()
        # 对孩子们的胃口g进行排序
        g.sort()

        # 用两个变量来记录目前的索引下标
        child = 0
        cookie = 0
        while child < len(g) and cookie < len(s):
            # 如果饼干s大小满足孩子的胃口g就记录
            if s[cookie] >= g[child]:
                child +=1
            cookie +=1 # 无论满不满足都增加饼干的数量
        # 返回满足孩子的数量
        return child

老师的代码:

# 登录 AlgoMooc 官网获取更多算法图解
# https://www.algomooc.com
# 作者:程序员吴师兄
# 代码有看不懂的地方一定要私聊咨询吴师兄呀
# 分发饼干( LeetCode 455 ):https:#leetcode-cn.com/problems/assign-cookies/
class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        # 1、将孩子们的胃口值按照从小到大的顺序排列
        # 优先满足胃口小的孩子
        g.sort()

        # 2、将饼干按照从小到大的顺序排列
        s.sort()

        # child 代表 g 的下标,即表示有多少孩子的胃口得到满足
        child = 0

        # child 代表 s 的下标,即表示目前有多少饼干被使用了
        cookie = 0

        # 遍历所有的饼干
        # 遍历过后,饼干只有两种状态
        # 1、要么找到了需要这个饼干的孩子
        # 2、要么剩下的孩子中,胃口值最低的孩子都大于这个饼干的值,那么这个饼干没人要
        while cookie < len(s) and child < len(g) :
            # 孩子的胃口得到了满足
            if s[cookie] >= g[child] :
                # 得到满足的孩子数量加 1
                child += 1
            
            # 查看下一个饼干能否找到需要的孩子
            cookie += 1
        
        # 最后返回孩子数量
        return child

扩展写法:

总结:

  • 在机场等飞机的过程中,也可以写代码。
  •  

贪心

  • 应该是,先求局部最优解,把这个局部最优解转化为全局最优解。

参考:

https://r07na4yqwor.feishu.cn/docx/AeTjdU9gJoRts2xDX5EcQ2CFnYd

 

标签:day08,饼干,int,孩子,胃口,LC455,cookie,child,贪心
From: https://www.cnblogs.com/liqi175/p/17973641

相关文章

  • 贪心算法题目2-力扣860
    在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任......
  • 贪心算法-题目3力扣53
    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1]的和最大,为 6。子数组 是数组中的一个连续部分。解题思路:从投......
  • 贪心算法-题目1力扣455(简单题)
    力扣455,给小朋友发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j]>=g[i],我们可以将这个饼干 j 分配......
  • day08-字典
    字典(Dict)是一种可变、无序的数据类型;那等等...我们回忆一下,字符串列表元祖是什么样的?字符串不可变,有序列表可变,有序元祖不可变,有序如何判断有序和无序呢,我首先确定在字符串、列表、元祖篇我们都讲到了切片取值,说明他们都是有顺序的,而字典是无序的,说明字典无法通过切片取值,......
  • 贪心国王游戏
    贪心耍杂技的牛国王游戏同款思路大部分贪心用的都是已经被证明过的知名的数学模型贪心得到的答案>=最优解贪心得到答案<=最优解#include<iostream>#include<algorithm>usingnamespacestd;//给pair<int,int>起个别名PIItypedefpair<int,int>P......
  • CF1914F Programming Competition 贪心原则的DP?
    终于理解了...希望写给小伙伴们,希望大伙可以理解。先确定贪心规则,即当最大子树不超过根子树减一的一半时,内部节点可以完全匹配。否则,可以先拿其他子树节点与最大子树内部节点匹配,子树内部再进行匹配。啥你说子树内部不够匹配怎么办?可以这么想,你这样都到匹配上限了,已经完全可以达......
  • 第 120 场双周赛(前缀和,双指针,树形dp+贪心)
     classSolution:deflargestPerimeter(self,nums:List[int])->int:nums.sort()n=len(nums)s=list(accumulate(nums))foriinrange(n-1,1,-1):ifnums[i]<s[i-1]:returnn......
  • [排序,贪心,置换环]洛谷P1327&&P8637,双倍经验
    前置知识:置换环,最小交换次数https://blog.csdn.net/yunxiaoqinghe/article/details/113153795?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%9C%80%E5%B0%91%E4%BB%BB%E6%84%8F%E4%BA%A4%E6%8D%A2%E6%8E%92%E5%BA%8F%E8%AF%81%E6%98%8E%E7%94%A8%E7%BD%AE%E6%8D......
  • Day08---IDEA
    Day08IDEA中的第一个代码IDEA项目结构介绍project(项目)module(模块)package(包)class(类)步骤:新建项目-->在项目内新建模块-->在新建模块内新建包-->在包内创建类常用的系统设置提示忽略大小写修改主题修改注释的颜色修改字体自动导包IDEA的项目和模块......
  • 力扣第 376 场周赛(三分,中位数贪心,滑动窗口)
     用一个哈希表记录一下,然后遍历统计一下即可。classSolution{public:vector<int>findMissingAndRepeatedValues(vector<vector<int>>&grid){intn=grid.size();unordered_set<int>st;vector<int>res;......