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

    描述:

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

    注意:

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

    示例 1

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

    输出: 1

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

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

    输出: 2

    解释:
    你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。
    你拥有的饼干数量和尺寸都足以让所有孩子满足。
    所以你应该输出2.

    思路:

    这是一道考察贪心算法的题目,只需要将小孩和饼干进行升序排列, 然后进行比对,如果小孩的胃口小于等于饼干,那么这个小孩就可以被满足,这样做可以保证饼干的分配是从当前最小的饼干开始的,被分到到的孩子也是当前胃口最小的孩子。

    代码实现

    Java

    class Solution {
        public int findContentChildren(int[] g, int[] s) {
            if (g == null || s == null) {
                return 0;
            }
            Arrays.sort(g);
            Arrays.sort(s);
            int n = 0;
            int m = 0;
            while (n < g.length && m < s.length) {
                if (g[n] <= s[m]) {
                    n++;
                }
                m++;
            }
            return n;
        }
    }

    结果

    python3

    class Solution:
        def findContentChildren(self, g: List[int], s: List[int]) -> int:
            g.sort()
            s.sort()
            n, m = 0, 0
            while len(g) > n and len(s) > m:
                if g[n] <= s[m]:
                    n += 1
                m += 1
            return n

    结果:

  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/nedulee/p/11841150.html
Copyright © 2011-2022 走看看