zoukankan      html  css  js  c++  java
  • Sort List 分类: leetcode 算法 2015-07-10 15:35 1人阅读 评论(0) 收藏

    对链表进行排序,要求时间复杂度为O(n log n) ,不使用额外的空间。

    我一开始的想法是借助quicksort的思想,代码如下:

    # time O(nlog(n))
    # Definition for singly-linked list.
    class ListNode:
        def __init__(self, x):
            self.val = x
            self.next = None
    
    class Solution:
        def sortList(self, head):
            if head is not None:
                self.quicksort(head,None)
            return head
    
        def quicksort(self,node_head,node_end):
            if node_head is not node_end :
                q=self.patition(node_head,node_end)
                self.quicksort(node_head,q)
                self.quicksort(q.next,node_end)
        def patition(self,head,end):
            #@return{ListNode}
            if head is None:
                return None
            else:
                i=head
                j=head.next
                x=head.val
                while j is not end:
                    if j.val<x:
                        self.ListNode_Val_Swap(i,j)
                        i=i.next
                    j=j.next
                i.val=x
                return i
    
        # swap 2 ListNodes' val
        def ListNode_Val_Swap(self,node1,node2):
            node1.val,node2.val=node2.val,node1.val

    但是对于大量的数据时间超出,不知为何,求指教。
    本地测试的时候,一旦链表长度超过8000多就会报错:RuntimeError: maximum recursion depth exceeded
    这是怎么回事?

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    产品设计步骤
    浅谈公司经营的事业发展线
    项目经理的眼:一切都是项目
    IT软件的编程方向
    后记:IT软件人员学习的书籍
    12、产品经理要阅读的书籍
    11、项目经理要阅读的书籍
    7、项目活动的开展
    6、项目组人员绩效考核
    5、项目组人员培训
  • 原文地址:https://www.cnblogs.com/iois/p/4637149.html
Copyright © 2011-2022 走看看