2020度小满java方向笔试题
第二题
题目描述:
有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方向笔试题相关推荐
- 爱奇艺2019秋招Java方向笔试题(B)
爱奇艺2019秋招Java方向笔试题(B) 1. 已知一个由5个顶点8条边构成的有向图,以下说法正确的是( C ) A. 各顶点的度之和为8 B. 若以邻接表作为存储结构,邻接表中结点个数为16 C. ...
- 阿里巴巴java方向笔试题(出自牛客网)
阿里巴巴java方向笔试题 1.以下程序输出结果是____ class A {public:A ():m_iVal(0){test();}virtual void func() { std::cout ...
- 阿里2020春招Java实习生笔试题
阿里2020春招Java实习生笔试题 第1题 第2题 今天上午参加了阿里实习笔试,2个编程题(60分钟),做的简直是惨不忍睹,一个都没出来.虽然和面试无缘了,但希望能帮到后面笔试的同学,所以将题目大概 ...
- 阿里巴巴java方向笔试题 带详细答案
阿里巴巴java方向笔试题 带详细答案 1,下列说法正确的是() A.一个文件里可以同时存在两个public修饰的类 B.构造函数可以被重写(override) C.子类不能访问父类非public和p ...
- 美团点评2020校招系统开发方向笔试题(编程题题解)
这套笔试题的编程题很简单,感觉没什么可以写的题解的 [编程题]大数加法 注意下负号的情况 #include <bits/stdc++.h> using namespace std; typ ...
- 爱奇艺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. ...
- 爱奇艺2020校招Java方向笔试题(第二场)
1. 以下关于synchronized描述不正确的是(C) A. 当一个线程访问某对象的synchronized方法或者synchronized代码块时,其他线程对该对象的该synchronized方 ...
- 2020 字节跳动java面试笔试题 (含面试题解析)
本人5年开发经验.19年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.字节等公司offer,岗位是Java后端开发. 因为发展原因最终选择去了字节,入职一年时间了,也成为了面试官,之前 ...
- 美团点评2020校招运维方向笔试题(附答案)
文章目录 TCP为什么需要第三次握手?第三次握手失败了会怎么样 请简述ssrf的原理.有哪些攻击方式及防御方法 OSPF(Open Shortest Path First)路由协议建立邻居的过程有那几 ...
最新文章
- mysql 5.7 修改root 密码
- Apache2.2中文手册
- springAOP编程-aspectJ开启注解自动代理
- P2P原理及UDP穿透简单说明
- 做了中台就不会死吗?每年至少40%开发资源是被浪费的!
- 伊恩斯普里格斯3D肖像的秘密
- python+selenium之自动生成excle,保存到指定的目录下
- winfrom axacropdf预览pdf怎么一直显示_PDF合并怎么做?分享多个PDF文件合并的方法...
- ssis 执行任务的日志_SSIS和PowerShell –执行流程任务
- SnagIt的Visual Studio Team System插件
- 网络管理与维护作业9
- 知识图谱研讨实录09丨肖仰华教授带你读懂知识图谱语言认知
- 数据包接收系列 — IP协议处理流程(二)
- 模拟器计算机内存不足,网易mumu模拟器
- 进程管理(一)--进程管理的基本概念
- 计算机学院 名言,计算机系网络毕业名言
- 三款超火的国外壁纸应用,让你每天都用新手机
- 在Controller注入Service报错的解决方法
- DaisyDisk for Mac(mac磁盘清理软件)
- 电路习题解答 第五章 5-1、5-2