sort-list
来源:互联网 发布:人工智能计算器电脑版 编辑:程序博客网 时间:2024/06/01 22:24
Sort a linked list in O(n log n) time using constant space complexity.
大致意思:用常数空间复杂度和O(nlogn)的时间复杂度对链表排序。
考点:
1. 快慢指针;2. 归并排序。
此题经典,需要消化吸收。
复杂度分析:
T(n) 拆分 n/2, 归并 n/2 ,一共是n/2 + n/2 = n
/ \ 以下依此类推:
T(n/2) T(n/2) 一共是 n/2*2 = n
/ \ / \
T(n/4) ……….. 一共是 n/4*4 = n
一共有logn层,故复杂度是 O(nlogn)
关键代码:
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode sortList(ListNode head) { if (head == null || head.next == null) return head; // step 1. cut the list to two halves ListNode prev = null, slow = head, fast = head; while (fast != null && fast.next != null) { prev = slow; slow = slow.next; fast = fast.next.next; } prev.next = null; // step 2. sort each half ListNode l1 = sortList(head); ListNode l2 = sortList(slow); // step 3. merge l1 and l2 return merge(l1, l2); } ListNode merge(ListNode l1, ListNode l2) { ListNode l = new ListNode(0), p = l; while (l1 != null && l2 != null) { if (l1.val < l2.val) { p.next = l1; l1 = l1.next; } else { p.next = l2; l2 = l2.next; } p = p.next; } if (l1 != null) p.next = l1; if (l2 != null) p.next = l2; return l.next; }}
阅读全文
0 0
- list sort
- list sort
- Sort List
- Sort List
- list - sort
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- 详解Android动画之Tween Animation
- poj-1837
- spring配置文件xml文件开头总是有个红叉,是找不到schema文件
- 51nod2006 飞行员配对(二分图最大匹配)匈牙利算法
- NAT技术与代理服务器调研
- sort-list
- 短信验证码
- java创建文件夹不存在的文件
- 配置JAVA环境的时候,环境变量中administrator的用户变量和系统变量的区别?
- PHP中self和this的用法区别
- 流媒体开发的有用网址收藏
- =="和Equals的区别
- Java异常机制
- Linux下安装Zookeeper