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. 使 ...
随机推荐
- Cordova IOT Lesson002
hello index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...
- Ubuntu+IntelliJ IDEA+Android 配置NDK环境+openCV
最近需要将Python人证对比模型移植安卓端.安卓端需要使用openCV简单的人像提取处理.在配置openCV前首先需要配置NDK环境. NDK的介绍(http://www.cnblogs.com/l ...
- ajax 函数回调
var initTaxPriod = function (taxNo) { intitSearch(); $("#taxPeriod").html(""); t ...
- 咸鱼入门到放弃7--jsp<二>jsp常用标签
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
- maya cmds pymel undoInfo chunk 撤销束
maya cmds pymel undoInfo chunk 撤销束 cmds.undoInfo(openChunk = 1) # your code cmds.undoInfo(closeChunk ...
- Java 实现视频下载功能
public static boolean httpDownload(String httpUrl, String saveFile) { // 1.下载网络文件 int byteRead; URL ...
- golang map 读写锁与深度拷贝的坑
0X01 golang中,map(字典)无法并发读写 简单来说,新建万条线程对同一个map又读又写,会报错. 为此,最好加锁,其实性能影响并不明显. type taskCache struct{ sy ...
- ISP PIPLINE (三) BPC
what is the Bad Pixel? 坏点为死点,也就是基本不随照度变化呈现光电线性转换的关系.表现为暗态常亮,亮态常暗. 坏点分类:静态坏点:亮坏点,暗坏点. ...
- jdk1.8.0_40 +maven+tomcat7.0+mysql8.0详细安装教程
(一) jdk的安装 1.下载jdk推荐下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...
- CentOS7 安装 jexus-5.8.2-x64
前要提示: 如果你要安装asp.net 请参考: http://www.cnblogs.com/xiaoruilin/p/7867823.html 背景: CentOS7 Mono (Mono JIT ...