您的位置:首页 > 其它

148. Sort List

2017-02-15 16:56 281 查看
Sort a linked list in O[/i](n[/i] log n[/i]) time using constant space complexity.
Total Accepted: 94368
Total Submissions: 342453
Difficulty: Medium
Contributors: Admin

分析

首先可以使用和147相同的思想,把数字复制到vector<int> 中,然后排序,再赋值回去
如果需要对list本身进行操作,则需要使用时间复杂度O(NlogN),那么能用到的排序只有快排,归并,堆排
1. 因为list是单向的没法从后往前,所以需要快排的话,只能重新建立一个倒序的list,进行快排,平均时间复杂度O(NlogN),空间复杂度O(N)。下面的算法建立一个存储 ListNode * 的 vector 数组,从而实现双向访问
2. 归并排序,需要使用快慢指针,找到中间node位置,如果使用递归的话,需要考虑栈的消耗空间,所以时间复杂度O(NlogN),空间复杂度O(logN)
3. 堆排序,需要建立一个最小堆,空间复杂度O(N),时间复杂度O(NlogN)
现在看来满足常量空间的只能是2,归并排序并将其写成非递归形式。
null
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: