LeetCode 148. Sort List--O(nlogn)时间复杂度和常数空间复杂度给链表排序
来源:互联网 发布:岛精程序员制版招聘 编辑:程序博客网 时间:2024/06/05 14:12
Sort a linked list in O(n log n) time using constant space complexity.
package com.main;class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}public class Main { public ListNode sortList(ListNode head) { if (head == null || head.next == null) { return head; } //平分结点,分成两个分支 ListNode cur = null, slow = head, fast = head; while (fast != null && fast.next != null) {//如果是奇数个结点,多出来的一个结点放在了后面的部分 cur = slow; slow = slow.next; fast = fast.next.next; } cur.next = null; //每个分支都要排序,然后按序合并 ListNode l1 = sortList(head); ListNode l2 = sortList(slow); //按序合并,子分支和大分支都在这里合并 return merge(l1, l2); }//sortList public ListNode merge(ListNode l1, ListNode l2) { ListNode res = new ListNode(0), p = res; while (l1 != null && l2 != null) { if (l1.val < l2.val) { res.val = l1.val; p.next = l1;//这一句别忘了 l1 = l1.next; } else { res.val = l2.val; p.next = l2; l2 = l2.next; } p = p.next; }//while if (l1 != null) { p.next = l1; } if (l2 != null) {// p.next = l2.next;不能是p.next = l2.next p.next = l2; } return res.next;// ListNode res = new ListNode(0)因为第一个结点是0,所以这里是 res.next,而不是res }//merge public static void main(String[] args) { ListNode A = new ListNode(6); A.next = new ListNode(2); A.next.next = new ListNode(4); A.next.next.next = new ListNode(3); A.next.next.next.next = new ListNode(5); Main main = new Main(); ListNode C = main.sortList(A); System.out.println(C); }}
以下为递归执行流程,分别是2个结点和4个结点的情况
15 / 15 test cases passed.
Status: Accepted
Runtime: 8 ms
T(n) = O(nlogn)
阅读全文
0 0
- LeetCode 148. Sort List--O(nlogn)时间复杂度和常数空间复杂度给链表排序
- O(nlogn)时间复杂度 链表排序
- 对链表排序 要求时间 复杂度为 O(nlogn) 空间复杂度为常量
- LeetCode-Sort List,链表排序(插入和归并),时间复杂度O(n^2) and O(nlgn)
- leetcode之时间复杂度为O(nlogn)的链表排序
- 单链表的归并排序:时间复杂度O(nlogn),空间复杂度O(1)
- 快速排序[平均时间复杂度O(NlogN)]
- LCS时间复杂度O(NlogN)
- 实现时间复杂度为O(nlogn)的链表排序算法
- 【排序】各种排序算法时间复杂度和空间复杂度表
- 每天一道LeetCode-----链表排序,要求复杂度在O(nlogn)
- 排序总结-时间复杂度和空间复杂度
- 时间复杂度O(n),空间复杂度O(1)的排序
- Leetcode 234 Palindrome Linked List 复杂度为时间O(n) 和空间(1)解法
- 各类排序算法时间复杂度和空间复杂度对比表
- 各种排序算法时间复杂度和空间复杂度表
- 各种排序算法时间复杂度和空间复杂度表
- 各种排序算法时间复杂度和空间复杂度表
- Maven 的构建之 pom文件一些属性分析
- POJ 2418 Hardwood Species 经典字典树 统计单词出现次数
- 【ZZULIOJ 】 几道水题
- java大神潜在的十个特征
- 自定义view画圆拖动
- LeetCode 148. Sort List--O(nlogn)时间复杂度和常数空间复杂度给链表排序
- C# 绘制饼图
- 【ZZULIOJ 1302】海军节上的鸣炮声计算 【容斥】
- leetcode:same tree
- request.setCharacterEncoding("UTF-8")的作用
- 机器学习 博文传送门
- TCP和UDP的区别和优缺点
- 653. Two Sum IV
- CSS内联学习总结