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爬虫之神器正则表达式
Nov 06 Python
python制作一个桌面便签软件
Aug 09 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
python学生管理系统代码实现
Apr 05 Python
pandas筛选某列出现编码错误的解决方法
Nov 07 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
numpy创建单位矩阵和对角矩阵的实例
Nov 29 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
django rest framework使用django-filter用法
Jul 15 Python
python3代码中实现加法重载的实例
Dec 03 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
PHP简介
2006/10/09 PHP
php whois查询API制作方法
2011/06/23 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
详解Vue组件实现tips的总结
2017/11/01 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
js实现秒表计时器
2019/12/16 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
Django日志模块logging的配置详解
2017/02/14 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
班主任班级寄语大全
2014/04/04 职场文书
政府法律服务方案
2014/06/14 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
python微信智能AI机器人实现多种支付方式
2022/04/12 Python