python coding

单链表快速排序

class ListNode():
    def __init__(self,val):
        self.val = val
        self.next = None
class Solution():
    def mergesortoflist(self,node):
        if not node or not node.next:
            return node
        midnode = node
        left = ListNode(0)
        resL = left
        right = ListNode(0)
        resR = right
        node = node.next
        while node:
            if midnode.val < node.val:
                right.next = node
                right = right.next
            else:
                left.next = node
                left = left.next
            node = node.next
        left.next = None
        right.next = None
        L = self.mergesortoflist(resL.next)
        R = self.mergesortoflist(resR.next)
        midnode.next = R
        if not L:
            return midnode
        else:
            temp = L
            while temp.next:
                temp = temp.next
            temp.next = midnode
        return L
 
a = [2,5,3,8,7,0,1,5,4,6,1]
nh = ListNode(0)
n = nh
for tmp in a:
    tmpn = ListNode(tmp)
    n.next = tmpn
    n = tmpn
nh = nh.next

quicksort = Solution()
nhsort = quicksort.mergesortoflist(nh)

asort = []
tmpn = nhsort
while tmpn is not None:
    asort.append(tmpn.val)
    tmpn = tmpn.next

print(a)
print(asort)

# --------------------------------------------输出---------------------------------------
[2, 5, 3, 8, 7, 0, 1, 5, 4, 6, 1]
[0, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8]

数组快速排序

def quickSorst(array):
    if len(array) < 2:
        return array
    else:
        pivot = array[0]
        less = [i for i in array[1:] if i <= pivot]
        greater = [i for i in array[1:] if i > pivot]
        return quickSorst(less) + [pivot] + quickSorst(greater)

a = quickSorst([2, 5, 3, 8, 7, 0, 1, 5, 4, 6, 1])
print(a)

# --------------------------------------------输出---------------------------------------
[0, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8]

并查集

class UnionFind:
    def __init__(self):
        """
        记录每个节点的父节点
        """
        self.father = {}
    
    def find(self,x):
        """
        查找根节点
        路径压缩
        """
        root = x

        while self.father[root] != None:
            root = self.father[root]

        # 路径压缩
        while x != root:
            original_father = self.father[x]
            self.father[x] = root
            x = original_father
         
        return root
    
    def merge(self,x,y,val):
        """
        合并两个节点
        """
        root_x,root_y = self.find(x),self.find(y)
        
        if root_x != root_y:
            self.father[root_x] = root_y

    def is_connected(self,x,y):
        """
        判断两节点是否相连
        """
        return self.find(x) == self.find(y)
    
    def add(self,x):
        """
        添加新节点
        """
        if x not in self.father:
            self.father[x] = None

例题:
省份数量
除法求值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值