Python实现查找最小的k个数示例【两种解法】


Posted in Python onJanuary 08, 2019

本文实例讲述了Python实现查找最小的k个数。分享给大家供大家参考,具体如下:

题目描述

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

解法1

使用partition函数可以知道,使用==O(N)==的时间复杂度就可以找出第K大的数字,并且左边的数字比这个数小,右边的数字比这个数字大。因此可以取k为4,然后输出前k个数字,如果需要排序的话再对结果进行排序

# -*- coding:utf-8 -*-
class Solution:
  def PartitionOfK(self, numbers, start, end, k):
    if k < 0 or numbers == [] or start < 0 or end >= len(numbers) or k > end:
      return
    low, high = start, end
    key = numbers[low]
    while low < high:
      while low < high and numbers[high] >= key:
        high -= 1
      numbers[low] = numbers[high]
      while low < high and numbers[low] <= key:
        low += 1
      numbers[high] = numbers[low]
    numbers[low] = key
    if low < k:
      self.PartitionOfK(numbers, start + 1, end, k)
    elif low > k:
      self.PartitionOfK(numbers, start, end - 1, k)
  def GetLeastNumbers_Solution(self, tinput, k):
    # write code here
    if k <= 0 or tinput == [] or k > len(tinput):
      return []
    self.PartitionOfK(tinput, 0, len(tinput) - 1, k)
    return sorted(tinput[0:k])
#测试:
sol = Solution()
listNum = [4,5,1,6,2,7,3,8]
rel = sol.GetLeastNumbers_Solution(listNum, 4)
print(rel)

运行时间:30ms

占用内存:5732k

解法2

解法1存在两个问题,一个是partition把数组的顺序改变了,第二是无法处理海量的数据,海量的数组全部导入到内存里面做partition显然是不合适的。因此可以找出结果中最大的数字,如果遍历的数字比这个数字小,则替换,否则不变,可以采用堆的形式来实现数据结构,达到O(logK)的复杂度,因此整体的时间复杂度为N*O(logK)

# -*- coding:utf-8 -*-
class Solution:
  def GetLeastNumbers_Solution(self, tinput, k):
    # write code here
    if tinput == [] or k <= 0 or k > len(tinput):
      return []
    result = []
    for num in tinput:
      if len(result) < k:
        result.append(num)
      else:
        if num < max(result):
          result[result.index(max(result))] = num
    return sorted(result)
#测试:
sol = Solution()
listNum = [4,5,1,6,2,7,3,8]
rel = sol.GetLeastNumbers_Solution(listNum, 4)
print(rel)

运行结果同上

运行时间:25ms

占用内存:5724k

时间和空间占用都比解法1更优。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
用Python的urllib库提交WEB表单
Feb 24 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
用Eclipse写python程序
Feb 10 Python
python实现决策树分类
Aug 30 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
python可视化text()函数使用详解
Feb 11 Python
python内打印变量之%和f的实例
Feb 19 Python
matplotlib相关系统目录获取方式小结
Feb 03 Python
解决python的空格和tab混淆而报错的问题
Feb 26 Python
Python合并多张图片成PDF
Jun 09 Python
Pytest中skip skipif跳过用例详解
Jun 30 Python
Python中文纠错的简单实现
Jul 07 Python
对Python闭包与延迟绑定的方法详解
Jan 07 #Python
python将控制台输出保存至文件的方法
Jan 07 #Python
对Python捕获控制台输出流的方法详解
Jan 07 #Python
python print输出延时,让其立刻输出的方法
Jan 07 #Python
Python3 单行多行万能正则匹配方法
Jan 07 #Python
Python字符串的全排列算法实例详解
Jan 07 #Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 #Python
You might like
PHP双向链表定义与用法示例
2018/01/31 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
详解JS函数重载
2014/12/04 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
canvas的神奇用法
2017/02/03 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
python实现封装得到virustotal扫描结果
2014/10/05 Python
Python AES加密模块用法分析
2017/05/22 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
python爬取内容存入Excel实例
2019/02/20 Python
python实现计算器简易版
2020/12/17 Python
联想德国官网:Lenovo Germany
2018/07/04 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
采购员岗位职责
2013/11/15 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
音乐节策划方案
2014/06/09 职场文书
单位活动策划方案
2014/08/17 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
高三毕业评语
2014/12/31 职场文书