力扣23 合并k个升序链表

打印 上一主题 下一主题

主题 518|帖子 518|积分 1554

数据布局:小根堆+链表
算法:将链表中的数据先存入数组,然后建立小根堆,依次取出堆顶置于新链表
,并调整堆
  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. *     int val;
  5. *     ListNode next;
  6. *     ListNode() {}
  7. *     ListNode(int val) { this.val = val; }
  8. *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9. * }
  10. */
  11. class Solution {
  12.     //向下调整建堆
  13.     private void adjustHeap(int root, List<Integer> a, int size){
  14.         int l = root*2 + 1;
  15.         while(l < size){
  16.             if(l+1 < size && a.get(l) > a.get(l+1)){
  17.                 l = l+1;
  18.             }
  19.             if(a.get(l) < a.get(root)){
  20.                 int x = a.get(l);
  21.                 a.set(l,a.get(root));
  22.                 a.set(root,x);
  23.                 root = l;
  24.                 l = 2*root+1;
  25.             }
  26.             else
  27.                 break;
  28.         }
  29.     }
  30.     private void createHeap(List<Integer> a, int size){
  31.         for(int r = (size-1)/2; r >= 0; r--){
  32.             adjustHeap(r,a,a.size());
  33.         }
  34.     }
  35.     public ListNode mergeKLists(ListNode[] lists) {
  36.         List<Integer> a = new ArrayList<>();
  37.         for(int i = 0; i < lists.length; i++){
  38.             ListNode p = lists[i];
  39.             while(p != null){
  40.                 a.add(p.val);
  41.                 p = p.next;
  42.             }
  43.         }
  44.         createHeap(a,a.size());
  45.         ListNode arr = new ListNode(),p = arr;
  46.         for(int i = 0; i < a.size(); i++){
  47.             System.out.println(a.get(0));
  48.             ListNode q = new ListNode(a.get(0));
  49.             p.next = q;
  50.             p = q;
  51.             a.set(0,a.get(a.size()-1-i));
  52.             adjustHeap(0,a,a.size()-1-i);
  53.         }
  54.         
  55.         return arr.next;
  56.     }
  57. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表