算法题——Merge k Sorted Lists(JAVA)合并链表
来源:互联网 发布:sql server 2012 编辑:程序博客网 时间:2024/06/14 19:41
题目描述:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
读题:
合并若干个有序列表
知识储备:
归并排序
将待排序序列R[0…n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列
归并排序其实要做两件事:
(1)“分解”——将序列每次折半划分。
(2)“合并”——将划分后的序列段两两合并后排序。
时间复杂度
归并排序的形式就是一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的可以得出它的时间复杂度是O(n*log2n)。
空间复杂度
需要一个大小为n的临时存储空间用以保存合并序列。
解题思路:
类似归并排序,
(1)“分解”——将链表数组每次折半划分。
(2)“合并”——将划分后的链表两两合并排序。
时间复杂度
它需要遍历的次数就是二叉树的深度,而根据完全二叉树的可以得出它的时间复杂度是O(n*log2n)。
空间复杂度
排序时只需改变链表的指针指向即可,不需要一个新的数组。因此空间复杂度为O(1)
提交代码:
/** * 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) { int len = lists.length; if (len == 0) { return null; } else if (len == 1) { return lists[0]; } int mid = len / 2; //划分链表数组 ListNode left = mergeKLists(Arrays.copyOfRange(lists, 0, mid)); ListNode right = mergeKLists(Arrays.copyOfRange(lists, mid,len)); return mergeTwoLists(left, right); } //两两链表合并 public ListNode mergeTwoLists(ListNode a , ListNode b){ ListNode res = new ListNode(0) ; ListNode cur = res; while(a != null && b != null){ if(a.val < b.val){ cur.next = a ; a = a.next ; }else{ cur.next = b ; b = b.next ; } cur = cur.next ; } while(a != null){ cur.next = a ; a = a.next ; cur = cur.next ; } while(b != null){ cur.next = b ; b = b.next ; cur = cur.next ; } return res.next ; }}
0 0
- 算法题——Merge k Sorted Lists(JAVA)合并链表
- 104.Merge k Sorted Lists-合并k个排序链表(中等题)
- 合并k个有序链表 Merge k Sorted Lists
- K链表合并 Merge k Sorted Lists
- Merge k Sorted Lists(合并k个有序链)
- LeetCode算法题——23. Merge k Sorted Lists
- leetcode解题之23.Merge k Sorted Lists Java版本(合并k个有序的链表)
- LeetCode OJ 之 Merge k Sorted Lists(合并k个有序链表)
- LeetCode 23 Merge k Sorted Lists(合并K个已排序链表)
- LeetCodet题解--23. Merge k Sorted Lists(合并K个已排序的链表)
- leetcode_效率题解_23. Merge k Sorted Lists(合并k个有序链表)
- 【LeetCode-面试算法经典-Java实现】【023-Merge k Sorted Lists(合并k个排好的的单链表)】
- LeetCode 23. Merge k Sorted Lists(K路合并)
- 每周LeetCode算法题(四):Merge k Sorted Lists
- Merge k Sorted Lists Java
- Merge k Sorted Lists (Java)
- Leetcode刷题记——21. Merge Two Sorted Lists(合并两有序链表)
- Merge Two Sorted Lists 合并链表
- 详解log4j2(上)
- 《Android Y轴旋转动画Animation》 X轴 Y轴 Z轴
- react demo3 (自定义react组件)
- 上传头像,js实现
- 这样想起...
- 算法题——Merge k Sorted Lists(JAVA)合并链表
- Java开发者的大数据工具和框架
- 高性能服务器程序框架
- 2017年5月6日我的博客开通了
- HPUOJ1214题
- 函数递归法求fibonacci数列中第n项的值
- 最小的k个数(Java实现)
- 喵哈哈村的冒菜店-(线段树的区间合并)
- 走进数据结构之排序(六)---堆排序