[leetcode] 148. Sort List 解题报告
2016-01-10 12:05
489 查看
题目链接:https://leetcode.com/problems/sort-list/
Sort a linked list in O(n log n)
time using constant space complexity.
思路:可以利用递归的性质。
归并排序时间复杂度为O(n*log(n)),但是这题要求空间复杂度为O(1),利用递归其实是消耗了O(log(n))的栈空间,但已经可以视为常量空间复杂度。
每次可以使用快慢指针将链表二分,然后再递归分割.直到分割到最小开始合并链表.最后返回的就是排过序的数组了.
啊!海贼王该更新了,上期new year又停更了一集!
递归代码如下:
Sort a linked list in O(n log n)
time using constant space complexity.
思路:可以利用递归的性质。
归并排序时间复杂度为O(n*log(n)),但是这题要求空间复杂度为O(1),利用递归其实是消耗了O(log(n))的栈空间,但已经可以视为常量空间复杂度。
每次可以使用快慢指针将链表二分,然后再递归分割.直到分割到最小开始合并链表.最后返回的就是排过序的数组了.
啊!海贼王该更新了,上期new year又停更了一集!
递归代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* sortList(ListNode* head) { if(!head || !head->next) return head; ListNode *slow = head, *fast = head; while(fast->next && fast->next->next) { slow = slow->next; fast = fast->next->next; } fast = slow->next, slow->next = NULL; auto p = sortList(head), q = sortList(fast); ListNode *pHead = new ListNode(0), *tem = pHead, *val; while(p || q) { if(!q || (p && p->val < q->val)) { tem->next = p; p = p->next; } else { tem->next = q; q = q->next; } tem = tem->next; } head = pHead->next; delete pHead; return head; } };
相关文章推荐
- 解決中英混合輸入時標點切換問題的辦法
- LeetCode - Convert Sorted List to Binary Search Tree
- 计数排序(其实思想是桶排序)
- 学习笔记 - Mac下隐藏文件的显示与隐藏
- JAVA获得设备信息
- MYsQL优化SQL
- J2EE SSH框架整合教程
- ABI (应用程序二进制接口)
- 贡献值列表
- 冒泡排序
- zabbix通过sendmail进行邮箱警报
- zabbix通过sendmail进行邮箱警报
- Matlab一个利用神经网络拟合函数的例子
- CHECKPOINT
- 如何控制自己之2016个人目标管理
- 多线程协作 FileStream文件读写操作,读写冲突解决
- 展示
- 提升性能-文档碎片
- 191,使用Reveal查看3D UI
- Android设计模式源码解析之单例模式