博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法试题 - 找出最小 k 个数
阅读量:5754 次
发布时间:2019-06-18

本文共 1141 字,大约阅读时间需要 3 分钟。

题目

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

解析

思路1

这一题应用堆排序算法复杂度只有O(nlog k),堆是完全二叉树的一种,最大堆就是最上面的数是最大的

该方法基于二叉树或者堆来实现,首先把数组前k个数字构建一个最大堆,然后从第k+1个数字开始遍历数组,如果遍历到的
元素小于堆顶的数字,那么久将换两个数字,重新构造堆,继续遍历,最后剩下的堆就是最小的k个数,时间复杂度O(nlog k)。

思路2

排序 + 切片

答案

标准答案

# -*- coding:utf-8 -*-class Solution:    def GetLeastNumbers_Solution(self, tinput, k):        # write code here、        import heapq        if tinput == None or len(tinput) < k or len(tinput) <= 0 or k <= 0:            return []        # 建立最小堆,最上面那个数是最小的,返回一个列表,这个列表就是从最小值开始的k个数        return heapq.nsmallest(k, tinput)# -*- coding:utf-8 -*-class Solution:    def GetLeastNumbers_Solution(self, tinput, k):        # write code here、        import heapq        if tinput == None or len(tinput) < k or len(tinput) <= 0 or k <= 0:            return []        return sorted(tinput)[:k]

自我实现代码

li = [1, 5, 6, 8, 92, 3, 23]class Findmixknums:    def __init__(self, li, k):        self.li = li        self.k = k    def findknum(self):        return sorted(self.li)[:self.k]findknum = Findmixknums(li, 3)print(findknum.findknum())

 

转载于:https://www.cnblogs.com/shijieli/p/10802665.html

你可能感兴趣的文章
测试九 赛后感受
查看>>
ECC椭圆曲线详解(有具体实例)
查看>>
关于WechatApp学习总结
查看>>
Linux常见命令(二)
查看>>
document.write()的用法和清空的原因
查看>>
【EXLUCAS模板】【拓展卢卡斯详解】【组合数高级篇】LuoGu P4720
查看>>
PyCharm切换解释器
查看>>
一些基本的灰度变换函数
查看>>
12.12日个人工作总结
查看>>
jmp far ptr s所对应的机器码
查看>>
css详解1
查看>>
【转载】Presentation at from Yoshua Bengio
查看>>
MySQL类型转换
查看>>
c#获取QQ音乐当前播放的歌曲名
查看>>
HashSet HashMap 源码阅读笔记
查看>>
变量声明提升1
查看>>
UI前7天
查看>>
轻量级的Java 开发框架 Spring
查看>>
JS之路——浏览器window对象
查看>>
Chrome教程(二)使用ChromeDevTools命令菜单运行命令
查看>>