题解 | #寻找第K大#

寻找第K大

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

最简单的方法就是排序,返回第n-k大的即可,此外可以使用最大堆,这些复杂度都是O(nlogn)的。 我在代码里自己写了一遍quicksort,mergesort,用python的sort试了一下,用最大堆试了一下,发现单纯用quicksort是不能行的,其他都是可以通过的。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param a int整型一维数组 
# @param n int整型 
# @param K int整型 
# @return int整型
#
import heapq
class Solution:
    def findKth(self , a, n: int, K: int) -> int:
        # write code here
        # self.quicksort(a , 0 , n-1)
        a = self.mergesort(a)
        print(a)
        return a[n-K]

    def mergesort(self , a):
        if len(a)==0 or len(a) == 1:
            return a
        else:
            mid = len(a)//2
            tmp1 = self.mergesort(a[:mid])
            tmp2 = self.mergesort(a[mid:])
            p1 = p2 = 0
            new = []
            while p1<len(tmp1) or p2<len(tmp2):
                if p1 == len(tmp1):
                    new.append(tmp2[p2])
                    p2+=1
                elif p2==len(tmp2):
                    new.append(tmp1[p1])
                    p1+=1
                else:
                    if tmp1[p1] <= tmp2[p2]:
                        new.append(tmp1[p1])
                        p1+=1
                    else:
                        new.append(tmp2[p2])
                        p2+=1
            return new




    def quicksort(self , a , start , end):
        t = a[end]
        t_index = end
        i = start
        while i < t_index:
            if a[i] <= t:
                i+=1
            else:
                tmp = a[i]
                del a[i]
                a.insert(t_index , tmp)
                t_index -= 1
        if t_index>start+1:
            self.quicksort(a , start , t_index-1)
        if t_index+1 < end:
            self.quicksort(a,t_index+1,end)

    def findKth2(self , a, n: int, K: int) -> int:
        a.sort()
        return a[n-K]

    def findKth3(self , a, n: int, K: int) -> int:
        heapq.heapify(a)
        for i in range(n-K):
            heapq.heappop(a)
        return a[0]


a = [1,3,5,2,2] ; n = 5; K = 3
print(Solution().findKth(a , n , K))


全部评论

相关推荐

现在是2026.2.27,距离我2025.8.16在boss上投出第一份简历以来已经过去了半年多时间了。可能许多牛友对我并不陌生,在去年的89月份,深陷实习焦虑的我不停的在牛客上发帖求助,改过的简历不知道发了多少次。因为双非本的缘故,在实习这条路上可谓是处处碰壁。boss上四位数的沟通只换来两位数的回复,好不容易约到的面试很多还因为各种原因被挂。最终在9月底遇到了我实习过程中的第一个贵人:美团实习的ld。尽管那是个测开岗,但是没有关注我实际的技术栈,而是用专业的提问让我感受到了前所未有的面试体验,发掘了自己的技术闪光点。最终让我决定放弃了另一家中小厂的后端。他们非常尊重我对开发学习的热情,也给足了我自由发挥的空间,如果不是他们让我深度参与的用例生成项目,我或许连接到后面面试的机会都没有。尽管岗位不是开发,但这个过程中对大厂工作流程的深度参与以及对业务,项目,和技术的思维提升对我后续的开发面试一样提供了巨大的帮助。时代的洪流让我们每个人都被迫卷入其中,错过了互联网的红利时期,无论实习还是秋招都令不同背景的同学倍感压力,尽管如此我们依旧要相信:努力定有回报最后祝各位27的兄弟姐妹们,在暑期实习的面试路上一路披荆斩棘,策马扬鞭,用梦中情司的offer回应自己一直以来不愿放弃的拼搏timeline:2.6一面2.11&nbsp;二面2.12&nbsp;三面&nbsp;当天转hr面2.26&nbsp;hr面,面完云证+录用评估2.27&nbsp;offer
EternalRig...:看完太感人了吧,你这是真正的一路生化
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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