• 贪心算法-分饼干问题


    1、题目描述

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

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

    2、问题分析:

      题目要求用给定的饼干分发给不同的小朋友,这些小朋友的需求量是不一样的,饼干的大小也是有大有小,大的饼干能分配给胃口比较小的孩子,反之胃口大的孩子只能用更大的饼干才能满足,那么如何分配才能使尽可能多的小朋友有饼干吃呢?每个小朋友最多只能有一块饼干,言外之意就是不能用几块饼干合并起来凑成一个大的饼干。

    3、算法思想:贪心算法(对于小的饼干尽可能的去满足胃口比较小的孩子,对于较大的饼干尽可能的去满足胃口比较大的孩子)

       1、首先对表示孩子胃口的数组和表示饼干大小的数组进行从小到大的排序

      2、设置两个“指针”,child指针表示当前得到满足的孩子的个数;cookie指针当前正在遍历饼干的下标索引值

      3、按照饼干数组的个数进行while循环遍历,每遍历到一个饼干,就拿这个饼干去试图满足当前胃口最小的孩子,如果能满足这个孩子,则能满足的孩子个数就加一

      4、不管前一个饼干能不能满足最小胃口的孩子,cookie指针都会向后移动一个位置

    4、解题代码:

     1 package com.baozi.test;
     2 
     3 import java.util.Arrays;
     4 
     5 /**
     6  * @author BaoZi
     7  * @create 2019-05-14-15:21
     8  */
     9 public class Solution2 {
    10     public static void main(String[] args) {
    11         int[] g = new int[]{5, 10, 2, 9, 15, 9};
    12         int[] s = new int[]{6, 1, 20, 3, 8};
    13         int children = Solution2.findContentChildren(g, s);
    14         System.out.println(children);
    15     }
    16 
    17     public static int findContentChildren(int[] g, int[] s) {
    18         //1、先对两个数组进行排序
    19         Arrays.sort(g);
    20         Arrays.sort(s);
    21         //设置指针child代表当前有几个孩子得到满足
    22         //设置指针cookie代表当前正在遍历饼干的下标索引值
    23         int child = 0;
    24         int cookie = 0;
    25         /**
    26          * 通过while循环的方式从饼干数组的第一个数据拿出来去试图满足第一个孩子,如果满足的话,当前得到满足的
    27          * 孩子数加一;
    28          * 不管这个饼干能不能满足这个孩子,都只试图比较一次,紧接着去遍历下一个饼干
    29          */
    30         while (child < g.length && cookie < s.length) {
    31             if (g[child] <= s[cookie]) {
    32                 child++;
    33             }
    34             cookie++;
    35         }
    36         return child;
    37     }
    38 }
  • 相关阅读:
    yum上包找不到时,用rpmsearch
    多语言国家与缩写映射表
    M_LROOT,LD_LIBRARY_PATH, “Not all extension Dlls were loaded”问题原因及解决方法(持续更新)
    android 手机信息获取
    32位和64位adb下载及安装
    basename usage in linux
    单台centos7.3 虚拟机实现主从复制和哨兵集群
    XXL-JOB分布式任务调度平台安装与部署
    MySQL5.7压缩包安装图文教程
    基于Consul+Upsync+Nginx实现动态负载均衡
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/10861390.html
Copyright © 2020-2023  润新知