「这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战」
描述
Given the head of a linked list, return the list after sorting it in ascending order.Can you sort the linked list in O(n logn) time and O(1) memory (i.e. constant space)?
Example 1:
1 | ini复制代码Input: head = [4,2,1,3] |
Example 2:
1 | ini复制代码Input: head = [-1,5,3,4,0] |
Example 3:
1 | ini复制代码Input: head = [] |
Note:
1 | kotlin复制代码The number of nodes in the list is in the range [0, 5 * 10^4]. |
解析
根据题意,就是给出了一个链表的头节点 head ,要求我们对其进行升序排序。题目还要求我们使用 O(n logn) 的时间复杂度和 O(1) 的内存。我尝试用了最简单的暴力插入,空间复杂度还是 O(1),但是 O(n^2) 时间复杂度,还是超时了。
解答
1 | python复制代码class ListNode(object): |
运行结果
1 | css复制代码Time Limit Exceeded |
解析
因为这里用到了内置函数 sorted 对值进行排序,又重新建立新的链表,所以时间上复杂度上是 O(n logn) 但是竟然通过了汗颜。但是空间复杂度是 O(n)。
解答
1 | python复制代码class ListNode(object): |
运行结果
1 | erlang复制代码Runtime: 284 ms, faster than 84.91% of Python online submissions for Sort List. |
解析
还可以用归并排序,只要是时间复杂度为 O(n logn) 的其他排序算法都可以。
解答
1 | python复制代码class ListNode(object): |
运行结果
1 | erlang复制代码Runtime: 544 ms, faster than 44.25% of Python online submissions for Sort List. |
原题链接:leetcode.com/problems/so…
您的支持是我最大的动力
本文转载自: 掘金