题解 | #寻找第K大#

寻找第K大

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

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param a int整型一维数组 
# @param n int整型 
# @param K int整型 
# @return int整型
class Solution:
    def __partition(self,li,left,right):
        num = li[left] # 需要归为的数
        '''
        左边有空位,从右边开始找比num小的放左边空位
        这时右边有空位了,同理
        while终止:碰到或者找需要移位的
        '''
        while left < right:
            while left < right and li[right] >= num:
                # 没碰到并且不满足移位条件
                # 等于的时候需要移动指针,不然就死循环了
                right -= 1
            li[left] = li[right]

            while left < right and li [left] <= num:
                left += 1
            li[right] = li[left]
        li[left] = num
        return left

    def findKth(self , a: list[int], n: int, K: int) -> int:
        # write code here
        K = n-K
        low = 0
        high = n-1
        cur = self.__partition(a,low,high)
        while cur != K:
            if cur < K:
                low = cur+1
            else:
                high = cur-1
            cur = self.__partition(a,low,high)
        return a[cur]

全部评论

相关推荐

我的人生算是废了,23届裸辞空档一年,存款只能坚持几个月了,找不到像样的工作了,人生何去何从。
梦想是成为七海千秋:这大环境下为什么要裸辞呀,风险真的挺大的,而且社招的话23届没有太多的竞争力,不过既然已经裸辞了就不要焦虑慢慢找。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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