Leetcode 23 Merge k Sorted Lists
2018-03-20 21:17
471 查看
题目如下:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Java解答:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Java解答:
class Solution { public ListNode mergeKLists(ListNode[] lists) { //边界判断 异常判断 if(lists==null||lists.length==0) return null; //用List实现堆 索引0不放元素 index的左孩子为2*index 右孩子为2*index+1 List<ListNode> heap=new ArrayList<>(); ListNode head=null; ListNode s=null; heap.add(null); //先将K个链表的第一个节点放入堆中 堆得大小≤k 因为如果有null 则不放进去 for(int i=0;i<lists.length;i++) if(lists[i]!=null) heap.add(lists[i]); //从n/2处 向上维护堆得性质 for(int i=(heap.size()-1)/2;i>=1;i--) protectedHeap(heap,i); //每次从堆顶拿走最小的节点 //如果这个节点的下一个节点为null 如果这个节点的下一个节点不为null 该怎么办?自行脑补,我打字很难表达 //维护堆得性质 while(heap.size()>1){ ListNode temp=heap.get(1); if(temp.next==null){ heap.set(1,heap.get(heap.size()-1)); heap.remove(heap.size()-1); }else{ heap.set(1,temp.next); } protectedHeap(heap,1); if(head==null){ 4000 head=temp; s=head; }else{ s.next=temp; s=s.next; } s.next=null; } return head; } //维护堆得性质 方法如下 public void protectedHeap(List<ListNode> heap,int index){ if(2*index>=heap.size()) return ; if(2*index+1>=heap.size()){ if(heap.get(2*index).val>=heap.get(index).val) return; else{ ListNode temp=heap.get(2*index); heap.set(2*index,heap.get(index)); heap.set(index,temp); protectedHeap(heap,2*index); } }else{ int temp=heap.get(2*index).val<heap.get(2*index+1).val?2*index:2*index+1; if(heap.get(temp).val<heap.get(index).val){ ListNode node=heap.get(temp); heap.set(temp,heap.get(index)); heap.set(index,node); protectedHeap(heap,temp); }else{ return; } } } }
相关文章推荐
- LeetCode 23 Merge k Sorted Lists(合并K个已排序链表)
- leetcode hard模式专杀之23 merge k sorted lists
- LeetCode - 23. Merge k Sorted Lists
- leetcode:23. Merge k Sorted Lists
- leetcode23---Merge k Sorted Lists
- LeetCode 23 Merge k Sorted Lists(优先队列|链表归并)
- leetcode 23. Merge k Sorted Lists
- leetcode编程记录6 #23 Merge k Sorted Lists
- leetcode (23) - Merge k Sorted Lists
- LeetCode(23)Merge K Sorted Lists
- [LeetCode23]Merge k Sorted Lists(合并k个有序链表)
- leetcode-23. Merge k Sorted Lists
- leetcode 23. Merge k Sorted Lists
- LeetCode 23 Merge k Sorted Lists
- Leetcode 23 Merge k Sorted Lists
- Leetcode-23:Merge k Sorted Lists
- Leetcode 23 Merge k Sorted Lists
- Leetcode 23. Merge k Sorted Lists
- LeetCode 23 - Merge k Sorted Lists
- LeetCode 23 Merge k Sorted Lists