【LeetCode】 23. Merge k Sorted Lists 合并K个排序链表(Hard)(JAVA)
题目地址: https://leetcode.com/problems/merge-k-sorted-lists/
题目描述:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
Input:
[
1->4->5,
1->3->4,
2->6
]
Output: 1->1->2->3->4->4->5->6
题目大意
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
解题方法
直接判断每一个链表的最小值
较耗时,直接可以想到
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode res = new ListNode(0);
ListNode pre = res;
while (pre != null) {
int index = -1;
for (int i = 0; i < lists.length; i++) {
if (lists[i] == null) continue;
if (index < 0 || lists[i].val < lists[index].val) {
index = i;
}
}
if (index < 0) {
pre = null;
} else {
pre.next = lists[index];
pre = lists[index];
lists[index] = lists[index].next;
}
}
return res.next;
}
}
执行用时 : 328 ms, 在所有 Java 提交中击败了 10.59% 的用户
内存消耗 : 41.2 MB, 在所有 Java 提交中击败了 56.04% 的用户
耗时短的方法
采用合并排序法,两两合并,最后得到结果
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if (lists.length <= 0) return null;
int n = lists.length;
while (n > 1) {
int len = n % 2 == 0 ? n / 2 : (n / 2 + 1);
for (int i = 0; i < n / 2; i++) {
lists[i] = merge(lists[i], lists[i + len]);
}
n = len;
}
return lists[0];
}
public ListNode merge(ListNode node1, ListNode node2) {
ListNode res = new ListNode(0);
ListNode pre = res;
ListNode cur = null;
while (node1 != null || node2 != null) {
if (node2 == null) {
cur = node1;
node1 = node1.next;
} else if (node1 == null) {
cur = node2;
node2 = node2.next;
} else if (node1.val > node2.val) {
cur = node2;
node2 = node2.next;
} else {
cur = node1;
node1 = node1.next;
}
pre.next = cur;
pre = cur;
}
return res.next;
}
}
执行用时 : 3 ms, 在所有 Java 提交中击败了 83.70% 的用户
内存消耗 : 41.3 MB, 在所有 Java 提交中击败了 53.66% 的用户
来源:CSDN
作者:吴中乐
链接:https://blog.csdn.net/qq_16927853/article/details/104559012