剑指offer第二版(Python3)--面试题40 : 最小的k个数

第2章 面试需要的基础知识

第3章 高质量的代码

第4章 解决面试题的思路

第5章 优化时间和空间效率

  面试题39 : 数组中出现次数超过一半的数字

  面试题40 : 最小的k个数

第6章 面试中的各项能力

第7章 两个面试案例


题目描述
牛客网
  输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

解题思路
  可以创建一个大小为k的数据容器来存储最小的k个数字,然后每次从输入的n个整数中读入一个数。每次拿读入的数与当前容器中最大值比较,若读入的数小于最大值,则将其加入容器中,并对容器排序,最后抛弃容器中最大值;若读入的数大于最大值,直接抛弃,然后继续读入下一个数。容器的最佳实现是使用最大堆,但下面我们直接用Python提供的排序函数。

实战

class Solution:
    def GetLeastNumbers_Solution(self, tinput, k):
        # write code here
        if not tinput or k <= 0 or k > len(tinput):
            return []
            
        results = sorted(tinput[:k])
        for number in tinput[k:]:
            if number < results[-1]:
                results.append(number)
                results = sorted(results)
                results = results[:-1]
            
        return results
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章