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);
} }

最新文章

  1. sealed、new、virtual、abstract与override 趣解
  2. bzoj2743: [HEOI2012]采花--离线树状数组+差分
  3. Android源码剖析之Framework层实战版(Ams管理Activity启动)
  4. jquery的验证实例方法
  5. runtime官方文档
  6. 打造基于Clang LibTooling的iOS自动打点系统CLAS(三)
  7. 手把手的SpringBoot教程,SpringBoot创建web项目(一)
  8. 在Visual Studio 2012中使用GSL
  9. 版本名称GA的含义:SNAPSHOT-&gt;alpha-&gt;beta-&gt;release-&gt;GA
  10. vue各种插件汇总
  11. Think twice, code once.
  12. 51Nod - 1433 0和5 找规律
  13. 修改Linux主机名
  14. 产品经理面试题——浅谈O2O
  15. SQL Server聚合函数与聚合开窗函数 (转载)
  16. 取消a标签或者onclick在移动端点击时的背景颜色
  17. 接口,定义接口的关键字是 interface 实现接口关键字是 implements
  18. 人的一生为什么要努力 &amp;1
  19. scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class
  20. go 数组

热门文章

  1. Python与R的区别和联系
  2. 微信小程序--家庭记账本开发--07
  3. 命令行编译C程序
  4. JS功能函数
  5. __x__(15)0906第三天__超链接
  6. docker容器和本机互传文件
  7. Python 面试中可能会被问到的30个问题
  8. RocketMQ生产消费模型选择
  9. 微信小程序计算经纬距离
  10. 创建zookeeper集群