题解 | #寻找第K大#

寻找第K大

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

注意,这里判断p==k不是p+1==k.

第K大 -> 第n-K+1小

如n=6,a = [1,2,3,4,5,6],第2大的数是5,第4小的数是4,第5小的数才对应5.
而partition返回的p -> 有0,...,p-1,一共p个数比nums[p]小,所以nums[p]是第p+1小的数,所以这里不用判断p+1==k,而是直接p==k.
在寻找最小的K个数中,则需要判断p+1==k,详见:https://blog.nowcoder.net/n/5d1b7a8073eb44eca5375560e48db77e

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

class Solution:
    def findKth(self, a, n, K):
        # write code here
        if K <=0 or K > n:
            return -2
        k = n-K
        def partition(nums, lo, hi):
            i,j = lo+1, hi
            p = lo
            while True:
                while i <= hi:
                    if nums[i] > nums[p]:
                        break
                    i += 1
                while j > lo:
                    if nums[j] < nums[p]:
                        break
                    j -= 1
                if i >= j:
                    break
                nums[i], nums[j] = nums[j], nums[i]
            nums[lo], nums[j] = nums[j], nums[lo]
            return j
        lo, hi = 0, n-1
        while(lo<=hi):
            p = partition(a, lo, hi)
#             print(lo, hi, p, k, a)
            if p == k:
                return a[p]
            elif p > k:
                hi = p-1
            elif p < k:
                lo = p+1
        return -1
全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
443735次浏览 4528人参与
# 春招别灰心,我们一人来一句鼓励 #
42340次浏览 539人参与
# 阿里云管培生offer #
120522次浏览 2222人参与
# 地方国企笔面经互助 #
7978次浏览 18人参与
# 同bg的你秋招战况如何? #
77401次浏览 569人参与
# 实习必须要去大厂吗? #
55833次浏览 961人参与
# 北方华创开奖 #
107495次浏览 600人参与
# 虾皮求职进展汇总 #
116568次浏览 887人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11726次浏览 292人参与
# 实习,投递多份简历没人回复怎么办 #
2455118次浏览 34862人参与
# 提前批简历挂麻了怎么办 #
149972次浏览 1979人参与
# 在找工作求抱抱 #
906148次浏览 9423人参与
# 如果公司给你放一天假,你会怎么度过? #
4765次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1196098次浏览 18551人参与
# 机械人春招想让哪家公司来捞你? #
157652次浏览 2267人参与
# 双非本科求职如何逆袭 #
662434次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12817次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35967次浏览 384人参与
# 简历中的项目经历要怎么写? #
86958次浏览 1517人参与
# 参加完秋招的机械人,还参加春招吗? #
20158次浏览 240人参与
# 我的上岸简历长这样 #
452090次浏览 8089人参与
牛客网
牛客企业服务