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的汉字转GBK码实现代码
Feb 19 Python
Python内置函数bin() oct()等实现进制转换
Dec 30 Python
python多线程扫描端口示例
Jan 16 Python
python获取图片颜色信息的方法
Mar 18 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
python os.fork() 循环输出方法
Aug 08 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
Python类型转换的魔术方法详解
Dec 23 Python
python字典进行运算原理及实例分享
Aug 02 Python
Python 一键获取电脑浏览器的账号密码
May 11 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学习教程之第1天
2008/06/15 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
微信小程序使用npm支持踩坑
2018/11/07 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
Python内置模块turtle绘图详解
2017/12/09 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
Python如何使用input函数获取输入
2020/08/06 Python
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
餐饮加盟计划书
2014/01/10 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
车队安全员岗位职责
2015/02/15 职场文书
小学班级口号大全
2015/12/25 职场文书
2016简单的租房合同范本
2016/03/18 职场文书