LeetCode455 分发饼干(简单贪心—Java优先队列简单应用)
题目:
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 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优先队列简单应用)的更多相关文章
- LeetCode1046 最后一块石头的重量(贪心—Java优先队列简单应用)
题目: 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == ...
- [Swift]LeetCode455. 分发饼干 | Assign Cookies
Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...
- [LeetCode] 455. 分发饼干 assign-cookies(贪心算法)
思路: 尽量先将小饼干分配给胃口小的孩子,故而饼干和孩子胃口都应该先排序. python中,a.sort()只能用于a为list, sort()是可变对象的方法,无参数,无返回值,但会影响改变对象. ...
- 点单登录原理和java实现简单的单点登录
引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...
- java实现简单的单点登录
java实现简单的单点登录 摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现 ...
- java实现简单的单点登录_转
摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO ...
- 【并发编程】一个最简单的Java程序有多少线程?
一个最简单的Java程序有多少线程? 通过下面程序可以计算出当前程序的线程总数. import java.lang.management.ManagementFactory; import java. ...
- 简单说说 Java 的 JVM 内存结构
问:简单说说 Java 的 JVM 内存结构分为哪几个部分? 答:JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分,分别解释如下.虚拟机栈:线程私有的,每个方法在执行时会创建一个 ...
- ACM_发工资(简单贪心)
发工资咯: Time Limit: 2000/1000ms (Java/Others) Problem Description: 作为广财大的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日 ...
随机推荐
- vs2013中配置SQLite数据库
转载:https://maplefan.com/index.php/2019/08/14/visual-studio-2013%e9%85%8d%e7%bd%aesqlite3%e7%9a%84%e6 ...
- 第1节 Scala基础语法:9、10、数组
1. 定义数组时,没有new和有new是有区别的: scala> val arr3 = Array[Int](2) 此时,arr3中仅包含1个元素2arr3: Array[Int] = A ...
- [转载]android 显示多选列表对话框setMultiChoiceItems
public class MultiChoiceItemsTest extends Activity implements OnClickListener { private String[] pro ...
- 使用IDEA查看数据库
emm...今天捣鼓了一下IDEA意外发现(原谅我后知后觉)不用Navicat也能查看数据库中的表,虽然可视化不如Navicat,但毕竟Navicat要钱,一些朋友也没有资源 = =,所以就记录并分享 ...
- org.apache.commons.logging.LogFactory 错误原因
上述问题的原因是因为在使用Spring框架时没有导入这个包导致的,导入这个包就ok了.
- 单元测试报错:unable to find a @SpringBootConfiguration
完整异常: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBoo ...
- php 增删改查范例(2)
增加页面add.php: <!DOCTYPE html><html lang="en"><head> <meta charset=& ...
- burpsuite下载安装及基本配置
jdk安装 根据电脑安装对应jdk版本 点此下载jdk 下载完成得到如下exe文件 配置Java环境变量 计算机右键-->属性-->高级系统设置-->环境变量 点击环境变量--> ...
- struts2--通配符映射
1.通配符映射: --规则: > 1)若找到多个匹配,没有通配符的优先: > 2)若指定动作不存在,struts2将会尝试把这个URI与任何一个包含着通配符*的动作名进行匹配: > ...
- 大数据萌新的Python学习之路(二)
笔记内容: 一.模块 Python越来越被广大程序员使用,越来越火爆的原因是因为Python有非常丰富和强大标准库和第三方库,几乎可以实现你所想要实现的任何功能,并且都有相应的Python库支持,比如 ...