题解 | #$O(N)$解法的最小K个数#

最小的K个数

https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf

顾名思义,其实是用了空间换时间,但是其实也是常数空间(我也是O1!但其实肯定比顶堆用的多);
但考虑到n可以到10000,顶堆需要至少logk,那这个方法还是有一点意义的。

别的不多说,上代码
class Solution:
    def GetLeastNumbers_Solution(self , input: List[int], k: int) -> List[int]:
        # write code here
        if input == [] or k == 0: 
            return None
        n = len(input)
        count = [0]*1001
        for i in range(n):
            count[input[i]] += 1
        res = []
        for i in range(1001):
            while k > 0 and count[i] > 0:
                res.append(i)
                k -= 1
                count[i] -= 1
        return res
有限数据下确实很唬人,hhhhh
但实际分析,只有n大于1000开始,这个算法才会快一点,这个和val的取值范围有关,如果是10000的话,其实是快的

时间复杂度O(N),空间复杂度O(1)。(嘿嘿)

全部评论

相关推荐

10-13 22:56
门头沟学院 C++
rt,鼠鼠的浪潮网签明天过期,鼠鼠是山东人,好像自己也能接受。之前的面试大厂基本挂干净了,剩下小米二面后在泡,问了下面试官没有挂,但要泡。还有海信似乎也通过了,不过在深圳,鼠鼠也不是很想去。其它还有一些公司应该陆陆续续还有一些面试,现在有些纠结是直接签了还是再等再面呢?大佬们能不能给鼠鼠提一些意见,万分感谢!!!
牛客78696106...:浪潮可不是开摆,当初我还是开发的时候我组长跟我说他们组有段时间天天1,2点走,早上5点就来,全组肝出来心肌炎,浪潮挣钱省立花可不是说说,当然也看部门,但是浪潮普遍就那dio样,而且你算下时薪就知道不高,没事也是9点半走,不然算你旷工
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
09-19 13:59
门头沟学院 Java
用微笑面对困难:Trae一下,如果真成了,他用了直接发字节起诉代码版权,,这个代码不商用是没问题的如果没成也是情理之中的。
点赞 评论 收藏
分享
渴望wlb的牛油果很...:直说卡第一学历不就行了 非得拐弯抹角
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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