题解 | #寻找第K大#

寻找第K大

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

n-low=k,返回a[low]
n-low>k,递归遍历右边的序列,n-low<k遍历左边的序列
把数组分成两部分,一部分小于一个值,另一部分大于这个值(temp),假设temp此时是数组第i个数,如果i=k,temp就是数组的第i个数。
如果i=k,那么temp就是第k大;如果i<k,k就在数组右边,继续在右边查找;如果i>k,k就在数组左边,就在左边查找。循环往复:

# -*- coding:utf-8 -*-

class Solution:
    def findKth(self, a, n, K):
        # write code here
        if n<= 1:
            return a[0]
        a = self.quickSort(a, 0, n-1, K)
        return a[n-K] 

    def quickSort(self, a, start, end, k):
        if start>=end:
            return
        low = start
        high = end
        temp =a[start]

        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]

        a[low] = temp
        self.quickSort(a,low+1, end ,k)
        self.quickSort(a,start, low ,k)

        return a
全部评论

相关推荐

冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务