题解 | #寻找第K大#

寻找第K大

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

随机取基准值pivot,减少时间消耗,避免超时.

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param a int整型一维数组 
# @param n int整型 
# @param K int整型 
# @return int整型
#
class Solution:
    def quickSort(self,nums,K):
        res = self.partition(nums, 0, len(nums) - 1,K)
        if res:
            return res
        else:
            return nums[K-1]

    def partition(self,nums, left, right,K):
        import random
        if left >= right:
            return
        # 随机取pivot,避免超时
        pivot = random.randint(left, right)
        equal = self.sortpivote(nums, nums[pivot], left, right)
        if equal[0] >= K:
            self.partition(nums, left, equal[0] - 1,K)
        elif equal[1] < K:
            self.partition(nums, equal[1], right,K)
        else:
            return nums[equal[0]+1]

    def sortpivote(self,nums, pivot, left, right):
        less = left - 1
        more = right + 1
        i = left
        while i < more:
            if nums[i] > pivot:
                less += 1
                nums[i], nums[less] = nums[less], nums[i]
                i += 1
            elif nums[i] < pivot:
                more -= 1
                nums[i], nums[more] = nums[more], nums[i]
            else:
                i += 1
        return [less + 1, more - 1]
    
    def findKth(self , a: List[int], n: int, K: int) -> int:
        return self.quickSort(a,K)
        # write code here
全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务