今天是小浩算法 “365刷题计划” 第101天 。分享一道很魔性的题目(很多槽点),也是一道入门级别的贪心算法题目。

01

PART

分发饼干

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。

假设你是一位很棒(多棒???)的家长,想要给你的孩子们一些小饼干(不能给大饼干吗???)但是,每个孩子最多只能给一块饼干(有毒吧。。。)

对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

注意:你可以假设胃口值为正(特么不正难道往外吐吗???)。一个小朋友最多只能拥有一块饼干。

示例 :

输入: [1,2,3], [1,1]

输出: 1

解释: 你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。所以你应该输出1。

(难道剩下一个饼干喂狗吗?????)

02

PART

题解分析

好吧。假如我们按照题目所说的策略来分析,尽可能的让孩纸满足,满足不了就一个饼干都不给他,忘掉那些懵逼的孩子。

其实策略就很简单了:我们只需要在满足孩子胃口的前提下,尽可能分配小的饼干给到他。典型的资本主义。

具体怎么做呢,我们把饼干和小朋友都按照从大到小排列。

  • 如果最大的饼干可以满足肚子最大的孩子,那就给他吃,同时比较下一个。

  • 如果最大的饼干不能满足肚子最大的孩子,那就让他饿着,然后看看能不能满足第二个孩子。(有点黑暗系,放弃小朋友

但是这里有个问题。凭什么就要先满足肚子最大的孩子。按道理讲,肚子越大应该越扛饿才对吧。所以我们换种思路,从肚子最小的孩子开始。

  • 如果最小的饼干可以满足肚子最小的孩子,那就给他吃,同时比较下一个。

  • 如果最小的饼干不能满足肚子最小的孩子,那就扔掉饼干,看看下一个饼干能不能给他吃。(放弃的是饼干

那这两种其实都算是贪心:

  • 一种是胃口太大轮到下一个孩子

  • 一种是饼干太小轮到下一个饼干

因为要同时控制饼干和小孩,所以我们采用双指针。这里给出先满足小肚子孩子的代码:

 1class Solution {2    public int findContentChildren(int[] grid, int[] size) {3        if (grid == null || size == null) return 0;4        Arrays.sort(grid);5        Arrays.sort(size);6        int gi = 0, si = 0;7        while (gi < grid.length && si < size.length) {8            if (grid[gi] <= size[si]) {9                gi++;
10            }
11            si++;
12        }
13        return gi;
14    }
15}

如果想先满足大肚子,代码也大同小异。直接从尾部向前遍历即可。

郑重申明(读我的文章必看):

  • 本系列所有教程都不会用到复杂的语言特性,大家无须担心没有学过相关语法,算法思想才是最重要的!

  • 作为学术文章,虽然风格可以风趣,但严谨,我是认真的。本文所有代码均在leetcode进行过测试运行。

03

PART

聊聊

前阵子状态很差,这两天逐步调整过来啦,多谢大家的关心。后面的内容我会换一个策略,提前拟定好目录以及学习纲领,更系统的来分享题解,希望大家继续支持!

我们遇到什么困难也不要怕,微笑着面对它!消除恐惧的最好办法就是面对恐惧!坚持,才是胜利。加油!奥利给!

漫画:知乎面试题(旋转数组最小值Ⅰ - 基础版)

漫画:知乎面试题(旋转数组最小值Ⅱ - 进阶版)

漫画:美团面试题(TOPK:求第K个最大的元素)

漫画:腾讯面试题(面试官问我会不会修供暖器,我说没问题)

漫画:位运算技巧整理汇总+一道被嫌弃的题目

如果你问我对学习算法有什么建议,这篇文章是必看的:

漫画:小白为了面试如何刷题?(呕心沥血算法指导篇)

漫画:呕心泣血算法指导篇(真正的干货,怒怼那些说算法没用的人)

 小浩算法,每日

关注领取《图解算法题》高清版

进群的小伙伴请加右侧私人微信(备注:进群)

一道魔性的贪心题目(随意吐槽)相关推荐

  1. 一道JS面试题目引发的思考

    今看到一道有意思的题目,引发很多未知的东西,页面上有html代码如下: <body> <form id="form1" runat="server&qu ...

  2. 百度实习生招聘的一道大数据处理题目(上)

    题目为:两个200G大小的文件A和B,AB文件里内容均为无序的一行一个正整数字(不超过2^63),请设计方案,输出两个文件中均出现过的数字,使用一台内存不超过16G.磁盘充足的机器.方案中指明使用ja ...

  3. 一道杨氏矩阵题目 201806

    一道杨氏矩阵题目 201806 介绍 题目 输入格式 输入样例 输入数据范围: 输出格式 输出样例 限制 思路 查找 增添 删除 某几个坑 示例 介绍 杨氏矩阵(Young Tableau)是对组合表 ...

  4. [SinGuLaRiTy] 贪心题目复习

    [SinGuLaRiTy-1024] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [POJ 2709] 颜料 (Painter) 题目描述 ...

  5. 一道Java面试题目——随想+心得

    原题目:Java的一道面试题----静态变量初始化过程 题目如下: public class Test{ private static Test tester = new Test(); //step ...

  6. 逆向查找_CTFer成长之路--一道数独逆向题目解题过程(算法分析、查找线索)...

    前言 CTF 是实战性很强的赛事.仅学习理论知识,不进行实操,永远无法成为 CTF 大神.本次博客为大家解读一道数独相关的逆向,讲解解题过程,总结知识点(CTF中的套路). 题目介绍 本次选择的是出自 ...

  7. 贪心算法(各种贪心题目)

    感觉很多贪心的题目只要想到怎么贪心就很快能解决,但是没有想到的话代码量就会很大,而且很容易出错,所有贪心还是要多做题目,掌握各种贪心的题目 题目链接:https://vjudge.net/contes ...

  8. 每日一道Python编程题目练习,不定期更新

    自学python中,此文章目的为记录练习过程,同时督促自己每天练习一道python题目,题目来源于网络,代码由自己书写,初学者,仅为记录,大佬不喜勿喷,尽量书写注释,如有错误,欢迎指正,如果有推荐的题 ...

  9. 一道GCD LCM题目题解

    题目描述: 第一行和第二行输入8个数字,对应每一位第二行都小于第一行,求最小的值xxx令xxx对第一行每一位取余后等于第二行(x不小于第一行的每个数)(x不小于第一行的每个数)(x不小于第一行的每个数 ...

最新文章

  1. [转] Lock-Free 数据结构
  2. 前端学习(1840):前端面试题之mpvue和小程序
  3. promotion failed 和 Concurrent Mode Failure的区别
  4. Choerodon猪齿鱼敏捷管理实践(一)——需求管理
  5. javafx button按钮分组突出选中按钮(ToggleButton)
  6. tcp 测试工具 android,安卓版手机tcp调试助手
  7. 将shapefile文件加工为FBX文件、glb文件、gltf文件
  8. U盘中毒后被隐藏的文件夹无法隐藏选项无法取消
  9. 计算机主板上电源供电缩写,新电脑电源标准开始普及?取消5V、3.3V供电,主板供电变为10PIN...
  10. Thief-Book:上班摸鱼看小说必备神器
  11. 基于单片机1KW高频感应加热器控制系统仿真设计(毕设)
  12. 用python创建微信机器人_手把手教你用Python创建微信机器人
  13. 终于放假咯~寒假规划
  14. 【烈日炎炎战后端】MySQL理论(2.8万字)
  15. sql语句中GROUP BY 和 HAVING的使用 count()
  16. oracle 表空间文件达到32G后解决办法
  17. 蓝桥杯 问题 1094: 字符串的输入输出处理(c++实现)
  18. Flink使用二次聚合实现TopN计算
  19. 在线播放bt php,yunBT:一个基于TP3.1的多用户BT离线下载程序,支持在线播放
  20. 成功解决第nnnnnn次couldn't communicate with the NVIDIA driver后的方案总结

热门文章

  1. 怎么让图片放大不模糊?
  2. Captura音频录制测试结论
  3. MySQL慢查询语句
  4. 服务器密码修改后怎么生效,服务器密码修改后数据库
  5. fragment 切换判断界面是否可见 setUserVisibleHint和onHiddenChanged使用场景
  6. 内网渗透系列:权限维持方法小结
  7. Python时间函数汇总
  8. 全面屏iphone 适配
  9. XMind中如何添加自定义图标
  10. python 饼状图的生成