zoukankan      html  css  js  c++  java
  • 分发饼干

    1、题目来源:

      选自LeetCode 455:分发饼干

    2、题目描述:

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

      注意:

        你可以假设胃口值为正。
        一个小朋友最多只能拥有一块饼干。

    3、题目分析:

      使用贪心算法,对孩子需求数组和饼干大小数组分别进行从小到大的排序。然后按照从小到大的顺序使用各个饼干尝试满足某个孩子,每个饼干只是用一次,若尝试成功的话,孩子个数加一,并换下一个孩子接着进行后面的尝试,直到发现没有更多的孩子或者没有更多的饼干为止,循环结束,返回此时的孩子个数。

    4、代码实现

     1 public int findContentChildren(int[] g, int[] s) {
     2         // 先对两个数组进行从小到大的排序
     3         Arrays.sort(g);
     4         Arrays.sort(s);
     5         int child = 0;
     6         int cookie = 0;
     7         /**
     8          * 按照从小到大的顺序使用各个饼干尝试满足某个孩子,每个饼干只是用一次,若尝试
     9          * 成功的话,孩子个数加一,并换下一个孩子接着进行后面的尝试,直到发现没有更多
    10          * 的孩子或者没有更多的饼干为止,循环结束,
    11          */
    12         while (child < g.length && cookie < s.length) {
    13             //只有当孩子需求值小于或者等于饼干大小的时候,child指针才会加一
    14             //这时候也就说明当前的饼干大小能够满足这个孩子的需求,
    15             if (g[child] <= s[cookie]) {
    16                 child++;
    17             }
    18             /**
    19              * 不管当前的饼干大小能不能满足孩子的需求,都要向后移动一位,当前若满足的话
    20              * 用下一个饼干去尝试满足下一个孩子,如当前饼干不能满足的话,尝试用下一个饼干
    21              * 去满足当前这个孩子
    22              */
    23             cookie++;
    24         }
    25         return child;
    26     }

    6、提交运行

  • 相关阅读:
    JVM垃圾回收器(三)
    JVM 运行时数据区(二)
    JVM 虚拟机&&类加载(一)
    带你看看Java的锁(三)-CountDownLatch和CyclicBarrier
    带你看看Java的锁(二)-Semaphore
    带你看看Java的锁(一)-ReentrantLock
    C# 判断文件格式的一些总结
    qt creator源码全方面分析(4-6)
    c/c++调用matlab的matOpen()出现异常
    qt creator源码全方面分析(4-5)
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/10692511.html
Copyright © 2011-2022 走看看