第二题

题目描述:
有N辆车要陆续通过一座最大承重为W的桥,其中第i辆车的重量为w[i],通过桥的时间为t[i]。
要求:
第i辆车上桥的时间不早于第i-1辆车上桥的时间;
任意时刻桥上所有车辆的总重量不超过W。
那么,所有车辆都通过这座桥所需的最短时间是多少?
输入:
第一行输入两个整数N、W(1<=N、W <= 100000)。第二行输入N个整数 w[1] 到 w[N] (1 <= w[i] <=W )。第三行输入N个整数 t[1] 到 t[N] (1 <= t[i] <= 10000)。
输出:
输出一个整数,表示所有车辆过桥所需的最短时间。
样例输入

4 2
1 1 1 1
2 1 2 2

样例输出:

4

思路:
建立最小堆,用每辆车离开桥的时间排序,当前桥上的车重加下一辆该出发的车重小于W时,下一辆车出发(即加入堆中),每当堆顶的车下桥时,更新时间。
最小堆可以用优先队列实现。
扩展:
PriorityQueue(优先队列),一个基于优先级堆的无界优先级队列。
实际上是一个堆(不指定Comparator时默认为最小堆),通过传入自定义的Comparator函数可以实现大顶堆。

PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(); //小顶堆,默认容量为11
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(11,new Comparator<Integer>(){ //大顶堆,容量11@Overridepublic int compare(Integer i1,Integer i2){return i2-i1;}
});

代码:

import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Scanner;public class Duxiaoman2 {public static void main(String[] args) {// TODO 自动生成的方法存根Scanner in = new Scanner(System.in);int N = in.nextInt();int W = in.nextInt();int arrw[] = new int[N];int arrt[] = new int[N];for (int i = 0; i < N; i++) {arrw[i] = in.nextInt();}for (int i = 0; i < N; i++) {arrt[i] = in.nextInt();}Duxiaoman2 test = new Duxiaoman2();System.out.println(test.mintime(arrw, arrt, W, N));}private int mintime(int[] arrw, int[] arrt, int W, int N) {PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();int time = 0;int w = 0;int[] endtime = new int[N];int i = 0;int j = 0;while (j < N) {if (i < N && w + arrw[i] <= W) {endtime[i] = arrt[i] + time;map.put(endtime[i], map.getOrDefault(endtime[i], 0) + arrw[i]);w = w + arrw[i];minHeap.add(endtime[i]);i++;} else {int emp = minHeap.peek();time = minHeap.poll();j++;while (!minHeap.isEmpty() && emp == minHeap.peek()) {minHeap.poll();j++;}w = w - map.get(emp);}}return time;}
}

2020度小满java方向笔试题相关推荐

  1. 爱奇艺2019秋招Java方向笔试题(B)

    爱奇艺2019秋招Java方向笔试题(B) 1. 已知一个由5个顶点8条边构成的有向图,以下说法正确的是( C ) A. 各顶点的度之和为8 B. 若以邻接表作为存储结构,邻接表中结点个数为16 C. ...

  2. 阿里巴巴java方向笔试题(出自牛客网)

    阿里巴巴java方向笔试题 1.以下程序输出结果是____ class A {public:A ():m_iVal(0){test();}virtual void func() { std::cout ...

  3. 阿里2020春招Java实习生笔试题

    阿里2020春招Java实习生笔试题 第1题 第2题 今天上午参加了阿里实习笔试,2个编程题(60分钟),做的简直是惨不忍睹,一个都没出来.虽然和面试无缘了,但希望能帮到后面笔试的同学,所以将题目大概 ...

  4. 阿里巴巴java方向笔试题 带详细答案

    阿里巴巴java方向笔试题 带详细答案 1,下列说法正确的是() A.一个文件里可以同时存在两个public修饰的类 B.构造函数可以被重写(override) C.子类不能访问父类非public和p ...

  5. 美团点评2020校招系统开发方向笔试题(编程题题解)

    这套笔试题的编程题很简单,感觉没什么可以写的题解的 [编程题]大数加法 注意下负号的情况 #include <bits/stdc++.h> using namespace std; typ ...

  6. 爱奇艺2020校招Java方向笔试题(第一场)

    1. 计算下列程序的时间复杂度(B) for (i=1;i<n;i++)for(j=1;j<m;j++){a1,a2,a3,a4}; A. O(n) B. O(nm) C. O(m) D. ...

  7. 爱奇艺2020校招Java方向笔试题(第二场)

    1. 以下关于synchronized描述不正确的是(C) A. 当一个线程访问某对象的synchronized方法或者synchronized代码块时,其他线程对该对象的该synchronized方 ...

  8. 2020 字节跳动java面试笔试题 (含面试题解析)

    本人5年开发经验.19年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.字节等公司offer,岗位是Java后端开发. 因为发展原因最终选择去了字节,入职一年时间了,也成为了面试官,之前 ...

  9. 美团点评2020校招运维方向笔试题(附答案)

    文章目录 TCP为什么需要第三次握手?第三次握手失败了会怎么样 请简述ssrf的原理.有哪些攻击方式及防御方法 OSPF(Open Shortest Path First)路由协议建立邻居的过程有那几 ...

最新文章

  1. mysql 5.7 修改root 密码
  2. Apache2.2中文手册
  3. springAOP编程-aspectJ开启注解自动代理
  4. P2P原理及UDP穿透简单说明
  5. 做了中台就不会死吗?每年至少40%开发资源是被浪费的!
  6. 伊恩斯普里格斯3D肖像的秘密
  7. python+selenium之自动生成excle,保存到指定的目录下
  8. winfrom axacropdf预览pdf怎么一直显示_PDF合并怎么做?分享多个PDF文件合并的方法...
  9. ssis 执行任务的日志_SSIS和PowerShell –执行流程任务
  10. SnagIt的Visual Studio Team System插件
  11. 网络管理与维护作业9
  12. 知识图谱研讨实录09丨肖仰华教授带你读懂知识图谱语言认知
  13. 数据包接收系列 — IP协议处理流程(二)
  14. 模拟器计算机内存不足,网易mumu模拟器
  15. 进程管理(一)--进程管理的基本概念
  16. 计算机学院 名言,计算机系网络毕业名言
  17. 三款超火的国外壁纸应用,让你每天都用新手机
  18. 在Controller注入Service报错的解决方法
  19. DaisyDisk for Mac(mac磁盘清理软件)
  20. 电路习题解答 第五章 5-1、5-2

热门文章

  1. 信息论知识——基础梳理
  2. STM32跑MicroPython的链接脚本分析
  3. 淘宝12月12日活动完成攻略
  4. maven-springmvc工程
  5. 【以终为始,与梦同行】致那些努力奔跑的人
  6. 通用量子操作系统,收揽全球量子硬件20%市场份额
  7. java原始人生存繁殖的游戏,一款原始人生存繁殖的游戏
  8. 后缀是dat的是什么文件 dat文件删除了能恢复吗
  9. Diffblue Cover AI Java:Difflane如何利用Diffblue Cover AI实现Java自动化的单元测试
  10. Openlayers中的比例尺(scale)和分辨率(resolution)