欢迎光临散文网 会员登陆 & 注册

455. | 贪心算法 LeetCode

2021-07-08 20:50 作者:有木乘舟  | 我要投稿


分析:

  贪心思想的核心是每一步只考虑当前的最优解,这些最优解构成最终问题的解。与动态规划不容,当前的最优解是独立的,与上下文无关。所以贪心算法需要满足其最优解能够由其子问题的最优解组成,也就是该问题具有最优子结构性质。

  具体到这一题。首先,小孩之间的饥饿感互不影响,一个人饱了其他人不会跟着变饱,其子问题是独立的。其次,每一次只要用最小的饼干喂饱胃口最小的那个小孩(子最优解),就能喂饱最多小孩,即问题的最优解。

  这里,可以用数学归纳法来证明贪心算法对该题有效。(不严谨证明,有错的话可以指正)

  • 当child = 1, cookie = 1时,显然结论成立。

  • 假设当child=1,2,...,n,  cookie=1,2,...,m时,结论也成立。则当child = 1,2,...,n,n+1, cookie=1,2,...,m,m+1时,若拿m+1饼干去喂n+1之前的小孩k,则n+1小孩一定无法喂饱,也就是比m+1喂n+1的结果小,反证了对n+1,m+1的情况,该结论也成立。

  • 即对该问题,每一次只要用最小的饼干喂饱胃口最小的那个小孩,就能喂饱最多小孩。

  因此,我们需要先对两个数组进行排序,然后依次喂饱小孩,直到所有饼干都喂完或没有满足的饼干为止。


455. | 贪心算法 LeetCode的评论 (共 条)

分享到微博请遵守国家法律