题解 | #寻找第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
全部评论

相关推荐

不愿透露姓名的神秘牛友
09-08 22:16
点赞 评论 收藏
分享
10-20 15:26
门头沟学院 Java
桥头牛油火锅:这个比例不正常,简历的话项目经历放中间,项目功能分点可以再明确点,前面加“·”或者“1 2 3”,另外简历上的照片可以去外面摄影店拍一下,以后也会用到的,hr筛人也是多少会看的,毕竟世界是一个巨大的卡颜局嘛,还有有些hr由于消息太多可能没看到,后面可能会回来找你,要简历的还会多一点,我也是普2本,比例大致是600:90:15:3,当然我实力不太够,拿的offer比较少,慢慢来吧
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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