[Leetcode] Merge k Sorted Lists (Java)

来源:互联网 发布:电梯优化问题奇偶层 编辑:程序博客网 时间:2024/05/02 14:45

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

就用了最普通的merge sort 用了k-1次,复杂度为O(n*k2)

import java.util.ArrayList;public class MergekSortedLists {static class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}public ListNode mergeKLists(ArrayList<ListNode> lists) {if(lists.isEmpty())return null;ListNode temp = lists.get(0);ListNode res = new ListNode(-1);res.next = temp;ListNode index = res;for(int i=1;i<lists.size();i++) {ListNode t = lists.get(i);while(temp!=null&&t!=null){if(temp.val<t.val){ListNode tt = new ListNode(temp.val);index.next = tt;index = tt;temp = temp.next;}else {ListNode tt = new ListNode(t.val);index.next = tt;index = tt;t = t.next;}}while(temp!=null){ListNode tt = new ListNode(temp.val);index.next = tt;index = tt;temp = temp.next;}while(t!=null) {ListNode tt = new ListNode(t.val);index.next = tt;index = tt;t = t.next;}temp = res.next;index = res;}return res.next;}public static void main(String[] args) {ArrayList<ListNode> lists = new ArrayList<ListNode>();lists.add(new ListNode(1));System.out.println(new MergekSortedLists().mergeKLists(lists).val);}}

如果k很大,k个链表一起用对最小堆会快一些,复杂度为O(k*logk*n),写起来比较麻烦,不写了

0 0