python3暴力解法+常规解法

寻找第K大

http://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf

先进行快速排序得到有序序列,返回下标n-k即可

-- coding:utf-8 --

class Finder:

def findKth(self, a, n, K):
    if n<=1:
        return a[0]
    a=self.fast_sort(a, 0, n-1, K)
    return a[n-K]

def fast_sort(self,a,first,last,k):
    #递归最终退出条件
    if first>=last:
        return 

    low=first
    high=last
    temp=a[first]

    while low<high:
        #从后往前找,找到一个就交换
        while a[high]>=temp and low<high:
            high-=1
        a[low]=a[high]

        #从前往后找,找到一个就交换
        while a[low]<temp and low<high:
            low+=1
        a[high]=a[low]

    #将参考值放到中间,此时low=high
    a[low]=temp

    #递归遍历标准值右边子序列
    self.fast_sort(a, low+1, last, k)

    #递归遍历标准值左边子序列    
    self.fast_sort(a, first, low, k)

    return a

常规解法:半快速排序+递归

每一次二分排序结束,此时游标值为low,有序序列长度为n,
n-low=k:返回a[low]
n-low>k:递归遍历右边序列
n-low<k:递归遍历左边序列

-- coding:utf-8 --

class Finder:
def findKth(self, a, n, K):
return self.fast_sort(a, 0, n-1, n,K) if n>1 else a[0]

def fast_sort(self,a,first,last,n,k):

    low=first
    high=last
    temp=a[first]

    while low<high:
        #从后往前找,找到一个就交换
        while a[high]>=temp and low<high:
            high-=1
        a[low]=a[high]

        #从前往后找,找到一个就交换
        while a[low]<temp and low<high:
            low+=1
        a[high]=a[low]

    #将参考值放到中间,此时low=high
    a[low]=temp

    if n-low==k:
        return temp

    #递归遍历标准值右边子序列
    elif n-low>k:
        return self.fast_sort(a, low+1, last,n, k)

    #递归遍历标准值左边子序列    
    else:
        return self.fast_sort(a, first, low,n, k)
全部评论
有不必要的计算,当low==n-K时就知道结果了,直接返回就行
点赞 回复 分享
发布于 2021-10-20 18:54

相关推荐

10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
12 收藏 评论
分享
牛客网
牛客企业服务