FB面经Prepare: Merge K sorted Array
Merge K sorted Array
跟Merge K sorted lists不同在于,从PQ里poll出来以后不知道下一个需要被加入PQ的是哪一个
所以需要写一个wrapper class
package fbPractise;
import java.util.*;
public class MergeKLists {
static class Pair {
int listIndex;
int idInList;
int value;
public Pair(int l, int id, int val) {
this.listIndex = l;
this.idInList = id;
this.value = val;
}
}
public static List<Integer> merge(List<List<Integer>> lists) {
List<Integer> res = new ArrayList<Integer>();
Comparator<Pair> comp = new Comparator<Pair>() {
public int compare(Pair p1, Pair p2) {
return p1.value - p2.value;
}
};
PriorityQueue<Pair> pq = new PriorityQueue<Pair>(1, comp);
for (int i=0; i<lists.size(); i++) {
Pair p = new Pair(i, 0, lists.get(i).get(0));
pq.offer(p);
}
while (!pq.isEmpty()) {
Pair pa = pq.poll();
int index = pa.listIndex;
int id = pa.idInList;
if (id < lists.get(index).size()-1) {
pq.offer(new Pair(index, id+1, lists.get(index).get(id+1)));
}
res.add(pa.value);
}
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> l1 = Arrays.asList(1,2,2,3,6);
List<Integer> l2 = Arrays.asList(1,4,5,7,8,9);
List<Integer> l3 = Arrays.asList(3,3,3,5,10);
List<List<Integer>> lists = new ArrayList<List<Integer>>();
lists.add(new ArrayList<Integer>(l1));
lists.add(new ArrayList<Integer>(l2));
lists.add(new ArrayList<Integer>(l3));
List<Integer> res = merge(lists);
System.out.println(res);
}
}
FB面经Prepare: Merge K sorted Array的更多相关文章
- 23.Merge k Sorted Lists (Array, Queue; Sort)
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思 ...
- [Swift]LeetCode23. 合并K个排序链表 | Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
- Merge k Sorted Arrays【合并k个有序数组】【优先队列】
Given k sorted integer arrays, merge them into one sorted array. Example Given 3 sorted arrays: [ [1 ...
- [LeetCode] Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...
- No.023:Merge k Sorted Lists
问题: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexit ...
- Merge k Sorted Lists
1. Merge Two Sorted Lists 我们先来看这个 问题: Merge two sorted linked lists and return it as a new list. The ...
- LeetCode:Merge k Sorted Lists
题目链接 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...
- 71. Merge k Sorted Lists
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- Merge k Sorted Lists Leetcode Java
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 使 ...
随机推荐
- 无法执行该VI,必须使用LabVIEW完整版开发系统才可以解决该错误
该错误99%是因为你在某个vi中使用了外部系统组件,比如api,.net组件,ActiveX组件,com组件,所有不是Labview原生的接口,在你打包后,在其他没有安装这些组件的电脑上运行,就会出现 ...
- ssl证书专题(2):自签名ssl 证书生成
参考: https://www.cnblogs.com/littleatp/p/5878763.html https://www.cnblogs.com/hnxxcxg/p/7610582.html
- pc端网页,移动端网页(andorid、ios)离开页面做一个时间存储
如图所示:在一个页面中做了一个倒计时,然后用户想离开页面做其他事情,需求是离开页面之后把时间保存,下一次进来继续的时候时间还是上次离开的时间 第一次我用的事件是: // window.onbefor ...
- C#使用CefSharp碰到的坑(一)
使用CEFSharp做模拟提交的话,在高版本下会出现一个神奇的错误: 如果站点使用的是阿里提供的验证控件的话,就是那种拖动条的,如果是使用CEFSharp的新版本的(目前我是测试过70的) ,会出现拖 ...
- 安装tensorflowGPU版本
ubuntu 16.0# 安装cuda ## 安装sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb.debsudo apt ...
- AMPPZ-2015 (MIPT Workshop Open 1)
A. Album of Numbers 设$cnt[i]$表示数字$i$的个数,则$ans=\frac{\sum_{i} i\times cnt[i]\prod_{j>i}(cnt[j]+1)} ...
- BOM 浏览器对象模型_window.navigator
window.navigator 对象 包含浏览器和系统信息的 Navigator 对象. 通过这个属性 了解用户的环境信息 window.navigator.userAgent 返回浏览器的 Use ...
- 9. http协议_响应状态码_页面渲染流程_路由_中间件
1. http协议 超文本传输协议 协议详细规定了 浏览器 和 万维网服务器 之间互相通信的规则 客户端与服务端通信时传输的内容我们称之为报文(请求报文.响应报文) 常见的发送 get 请求方式 在浏 ...
- vcs编译verilog/sysverilog并执行
命令: sverilog:表示支持systemverilog,如果只编译verilog不需要加 test.sv :这个可以是一个systemverilog/verilog文件,也可以是一个filel ...
- jquery全选 不全选
<input type="checkbox" id="check">点击 <input type="checkbox" c ...