148. Sort List (python)
来源:互联网 发布:免费安全软件排行 编辑:程序博客网 时间:2024/06/06 13:23
Sort a linked list in O(n log n) time using constant space complexity.
思路:能够有O(n lgn)时间复杂度的算法为,快速排序,堆排序,归并排序,三者的空间复杂度分别为O(1), O(N),O(N)
其中归并排序,其的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了,可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数列就完成了归并排序。
此题采用归并排序,因为链表的排序不需要像数组那样单独分配一个新数组空间。
结合109. Convert Sorted List to Binary Search Tree 和21. Merge Two Sorted Lists
109即一颗归并二叉树,21再将二叉树的结点合并即可
Runtime: 422 ms
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def merge(self,l1,l2): if not l1: return l2 if not l2: return l1 dummy=ListNode(0) p=dummy while l1 and l2: if l1.val<l2.val: p.next=l1 l1=l1.next else: p.next=l2 l2=l2.next p=p.next if l1: p.next=l1 else: p.next=l2 return dummy.next def sortList(self, head): if not head or not head.next: return head dummy=ListNode(0) dummy.next=head fast=slow=dummy while fast.next and fast.next.next: slow=slow.next fast=fast.next.next l1=self.sortList(slow.next) slow.next=None l2=self.sortList(dummy.next) return self.merge(l1,l2)
0 0
- 148. Sort List (python)
- Sort-----148. Sort List
- python list sort
- LeetCode-Sort List(Python)
- python: sort a list
- Sort List Leetcode Python
- Python sort list customisation
- Python-list-sort()
- LeetCode-Insertion Sort List (Python)
- 【leetcode】sort list(python)
- [leetcode] Insertion Sort List(python)
- 【LeetCode with Python】 Sort List
- Insertion Sort List Leetcode Python
- [python] list.sort and sorted
- 【LEETCODE】148- Sort List [Python]
- Python list.sort 与sorted
- 【Python】Python3 List sort()方法
- [python]leetcode(148). Sort List
- 第一篇博客
- 从一个文件中读取到的内容写到另一个文件中(read,write,open)
- CUDA入门(七)流
- angularjs的过滤器实现搜索与排序
- 设计模式——代理模式(C++)
- 148. Sort List (python)
- java例题学习:猜数字游戏
- 利用Android studio修改包名
- go语言笔记
- 【51Nod1277】字符串中的最大值
- POJ 2309 BST
- Spring学习第七天:Bean的作用域
- [bzoj3252]攻略
- Kafka的broker替补替换测试