题目:

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 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.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/assign-cookies

思路:

用优先队列分别存储孩子的胃口和饼干的尺寸,优先队列按从小到大排列,每弹出一个饼干尺寸就与此时孩子队列顶部的胃口作比较,如果符合就弹出两个队列的顶部,不符合只弹出饼干队列的顶部,直到其中一个队列为空。

代码:

import java.util.*;
import java.math.*; class Solution {
public int findContentChildren(int[] g, int[] s) {
Queue<Integer> qg = new PriorityQueue<>();
Queue<Integer> qs = new PriorityQueue<>(); for(int i=0; i<g.length; i++){
qg.add(g[i]);
}
for(int i=0; i<s.length; i++){
qs.add(s[i]);
} while(!qg.isEmpty() && !qs.isEmpty()){
int tg = qg.peek();
int ts = qs.peek();//取顶部数据,不弹出,poll取顶部数据并弹出
/*System.out.println("qg:" + qg.peek());
System.out.println("qs:" + qs.peek());
System.out.println();*/
if(ts >= tg){
qg.remove();//移除队列顶部数据
}
qs.remove();
}
//System.out.println(qs.size());
return (g.length - qg.size());
}
} public class Main {
public static void main(String[] args){
/* Queue<Integer> queue = new PriorityQueue<>();
queue.add(1);
queue.add(2);
queue.add(3);
queue.remove();
System.out.println(queue.size());*/
Scanner scanner = new Scanner(System.in);
Solution solution = new Solution();
int n = scanner.nextInt();
int[] g = new int[n];
int m = scanner.nextInt();
int[] s = new int[m];
for(int i=0; i<n; i++){
g[i] = scanner.nextInt();
}
for(int i=0; i<m; i++){
s[i] = scanner.nextInt();
}
System.out.println(solution.findContentChildren(g, s));
}
}

LeetCode455 分发饼干(简单贪心—Java优先队列简单应用)的更多相关文章

  1. LeetCode1046 最后一块石头的重量(贪心—Java优先队列简单应用)

    题目: 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == ...

  2. [Swift]LeetCode455. 分发饼干 | Assign Cookies

    Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...

  3. [LeetCode] 455. 分发饼干 assign-cookies(贪心算法)

    思路: 尽量先将小饼干分配给胃口小的孩子,故而饼干和孩子胃口都应该先排序. python中,a.sort()只能用于a为list, sort()是可变对象的方法,无参数,无返回值,但会影响改变对象. ...

  4. 点单登录原理和java实现简单的单点登录

    引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...

  5. java实现简单的单点登录

    java实现简单的单点登录 摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现 ...

  6. java实现简单的单点登录_转

    摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO ...

  7. 【并发编程】一个最简单的Java程序有多少线程?

    一个最简单的Java程序有多少线程? 通过下面程序可以计算出当前程序的线程总数. import java.lang.management.ManagementFactory; import java. ...

  8. 简单说说 Java 的 JVM 内存结构

    问:简单说说 Java 的 JVM 内存结构分为哪几个部分? 答:JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分,分别解释如下.虚拟机栈:线程私有的,每个方法在执行时会创建一个 ...

  9. ACM_发工资(简单贪心)

    发工资咯: Time Limit: 2000/1000ms (Java/Others) Problem Description: 作为广财大的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日 ...

随机推荐

  1. uniapp - 手机调试 ( vivo )

    打开开发者选项,打开USB设置,把默认USB选项改成MIDI模式,就可以检测到手机

  2. A way to find out how activity for mssql and oracle

    Dear buddy, Have you confuse that how activity about my databases, if we conside it by using backup ...

  3. antd组件实现上传证书

  4. 如何实现从登录接口响应数据中提取JSESSIONID

    通过调用接口,对服务器产生压力,单接口测试,会遇到响应数据返回的是要求先登录.这是我们在调用这个接口时,根据业务逻辑,必须先登录才可以,比如:提交订单,那么就需要先获取用户登录的JSESSIONID, ...

  5. C 随机数产生

    // ConsoleApplication5.cpp : Defines the entry point for the console application. // #include " ...

  6. IAR STM32F10x_StdPeriph_Driver 3.4转3.6.1库

    1.Fatal Error[Pe1696]: cannot open source file core_cmInstr.h STM32F10x_StdPeriph_Driver 3.4库移植换成3.6 ...

  7. BOM--location对象、history对象

    location对象 location 是最有用的BOM 对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能. 事实上,location 对象是很特别的一个对象,因为它既是win ...

  8. 树莓派4b烧录系统

    树莓派4b烧录系统 树莓派 型号:树莓派4b 系统:raspbian-buster-full 1.先用SDFormatterv4格式化sd卡 2.用win32diskimager-v0.9-binar ...

  9. Java多线程信号量同步类CountDownLatch与Semaphore

    信号量同步是指在不同线程之间,通过传递同步信号量来协调线程执行的先后次序.CountDownLatch是基于时间维度的Semaphore则是基于信号维度的. 1:基于执行时间的同步类CountDown ...

  10. 5.9 Nginx的配置优化