Merge k Sorted Lists Leetcode Java
2016-09-08 14:36
274 查看
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
使用分治法,时间复杂度是nlogk, n是所有元素个数的总和,k是k个lists,
这种方法和依次merge每一个list的方法的时间复杂度不同。
如果第一个list有n-k个元素,其余每个list是1个元素,
两两分治合并,每个元素参与了logk次合并,
如果是依次合并(第一个和第二个合并,之后的结果和第三个合并,以此类推),n-k个元素需要参与k次合作,
这样复杂度就会增加。
画了一张图
使用分治法,时间复杂度是nlogk, n是所有元素个数的总和,k是k个lists,
这种方法和依次merge每一个list的方法的时间复杂度不同。
如果第一个list有n-k个元素,其余每个list是1个元素,
两两分治合并,每个元素参与了logk次合并,
如果是依次合并(第一个和第二个合并,之后的结果和第三个合并,以此类推),n-k个元素需要参与k次合作,
这样复杂度就会增加。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode mergeKLists(ListNode[] lists) { if(lists.length == 0){ return null; } return mergeHelper(lists, 0, lists.length - 1); } public ListNode mergeHelper(ListNode[] list, int start, int end){ if (start == end){ return list[start]; } int mid = start + (end - start) / 2; ListNode left = mergeHelper(list, start, mid); ListNode right = mergeHelper(list, mid + 1, end); return mergeTwoSortedList(left, right); } public ListNode mergeTwoSortedList(ListNode list1, ListNode list2) { ListNode dummy = new ListNode(0); ListNode tail = dummy; while(list1 != null && list2 != null){ if(list1.val < list2.val) { tail.next = list1; tail = list1; list1 = list1.next; }else { tail.next = list2; tail = list2; list2 = list2.next; } } if(list1 != null) { tail.next = list1; } if(list2 != null) { tail.next = list2; } return dummy.next; } }
画了一张图
相关文章推荐
- Java [leetcode 21]Merge Two Sorted Lists
- 【Leetcode】Merge Two Sorted Lists in JAVA
- LeetCode : Merge Two Sorted Lists [java]
- 【LeetCode】23. Merge k Sorted Lists 基于Java的解法
- Merge k Sorted Lists Leetcode Java
- [Leetcode][JAVA] Merge Two Sorted Lists & Sort List
- [Leetcode] Merge k Sorted Lists (Java)
- LeetCode : Merge k Sorted Lists [java]
- (Java)LeetCode-23. Merge k Sorted Lists
- (Java)LeetCode-21. Merge Two Sorted Lists
- Merge k Sorted Lists leetcode java
- [LeetCode][Java] Merge k Sorted Lists
- [Leetcode] Merge Two Sorted Lists (Java)
- 【LeetCode】Merge Two Sorted Lists 解题报告(Java & Python)
- Merge Two Sorted Lists leetcode java
- Java for LeetCode 023 Merge k Sorted Lists
- Java [leetcode 23]Merge k Sorted Lists
- [LeetCode][Java] Merge Two Sorted Lists
- [leetcode]21. Merge Two Sorted Lists(java)
- 【LeetCode-面试算法经典-Java实现】【023-Merge k Sorted Lists(合并k个排好的的单链表)】