贪心算法

51 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

贪心概念:把总的问题分成许多子问题,求出每个子问题的最优解,合起来就是总的最优解

什么时候能用?分成的子问题互相间没有联系的时候。

比如:现在有面额10,9,5,1这几种面额的纸币,现在要带最少20元的纸币出门,问怎么带纸币数量最少?这时候,拿10元,拿9元都没影响,可以有

  • 10 9 1
  • 9 10 1
  • 9 5 5 1
  • .。。。。。

而换一种问法:如果要刚好带18元出门,问怎么带数量最少:如果按贪心来说,先拿最大的,10元,拿了10元就没法拿9元的了,这种对其他的结果有影响的,就不能用贪心了,只能用动态规划

  • 10 9 1
  • 9 10 1(划掉)
  • 9 5 5 1
  • .。。。。。

动态规划是自底向上,就是先算如果是1元的要几张,在算如果是5元的要几张,在算 9元要几张

贪心是自顶向下,就是要带最少的,肯定先拿最大的,先拿10元的,然后再拿9元的

算法解题过程:先思考一个思路,然后自己举例来验证,不通过就换一个思路,确定没问题了输出成代码 题目整理

【难度: 简单 】分饼干

思路:(给每个小孩分给接近他胃口值的饼干,这样最省)

先对孩子胃口数组和饼干数量数组进行从小到大排序,然后从头开始把每个饼干分给每个小孩,

如果饼干小于孩子胃口值,则跳过当前饼干继续比较下一个

【难度: 简单 】[[分糖果](oj.haizeix.com/problem/750…

每日一问:

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)

《第一天题解》

shimo.im/docs/47kgJ4…