21.23. Merge Two Sorted Lists /
来源:互联网 发布:红蜘蛛软件怎么退出 编辑:程序博客网 时间:2024/04/25 03:03
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
思路:选择两个list中第一个元素最小的为基础,然后将另外一个list的元素逐渐和第一个list中的元素相比,并将其插入到第一个list中,最终返回第一个list的头即可。
时间复杂度:O(M+N)
空间复杂度:O(M+N)
public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null) return l2; if(l2==null) return l1; if(l1.val>l2.val) return mergeTwoLists(l2,l1); ListNode head=l1; ListNode temp; while(l2!=null){ while(l1.next!=null&&l2.val>l1.next.val) l1=l1.next; if(l1.next==null){ l1.next=l2; return head; }else{ temp=l2; l2=l2.next; temp.next=l1.next; l1.next=temp; l1=l1.next; } } return head; }
递归算法:
public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null) return l2; if(l2==null) return l1; if(l1.val<l2.val){ l1.next=mergeTwoLists(l1.next,l2); return l1; }else{ l2.next=mergeTwoLists(l1,l2.next); return l2; } }
23. Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
思路: 两两合并,每次将两个listnode合并成一个. 利用到上述实现2个有序list合并的代码.
时间复杂度:O(N*logK) N为所有lists所包含的节点个数
public ListNode mergeKLists(ListNode[] lists) { int len=lists.length; if(lists==null||len==0) return null; return mergeKList(lists,0,len-1); } public ListNode mergeKList(ListNode[] lists,int left, int right) { int len=right-left; if(len==0) return lists[left]; else if(len==1){ return mergeTwoLists(lists[left],lists[right]); }else{ return mergeTwoLists(mergeKList(lists,left,left+len/2),mergeKList(lists,len/2+left+1,right)); } } public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null) return l2; if(l2==null) return l1; if(l1.val<l2.val){ l1.next=mergeTwoLists(l1.next,l2); return l1; }else{ l2.next=mergeTwoLists(l1,l2.next); return l2; } }
0 0
- 21.23. Merge Two Sorted Lists /
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- Merge Two Sorted Lists
- JSON.parse()和JSON.stringify()的用法
- centos7下安装mysql
- Andriod 开源项目源码解析第一期发布
- php文件缓存实例代码
- Android 系统重启与关机:Java 代码实现
- 21.23. Merge Two Sorted Lists /
- android_关于handler笔记
- wordpress 的 wp2sinablog插件
- ImageNet Classification with Deep Convolutional Neural Networks
- python查看是32位还是64位版本
- 检查列表是否为空的最好方法
- HDU 5726 GCD
- B:LINUX解析UBOOT传入参数的原理
- Sublime text2 自动补齐功能开启(jedi+sublimecodeintel)