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系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
Django unittest 设置跳过某些case的方法
Dec 26 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
Django框架中间件(Middleware)用法实例分析
May 24 Python
Django利用cookie保存用户登录信息的简单实现方法
May 27 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
Python+tkinter实现高清图片保存
Mar 13 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
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
javascript中Function类型详解
2015/04/28 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
详解Immutable及 React 中实践
2018/03/01 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
Web服务器框架 Tornado简介
2014/07/16 Python
python实现批量改文件名称的方法
2015/05/25 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
详解python编译器和解释器的区别
2019/06/24 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
python中wheel的用法整理
2020/06/15 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
珍珠鸟教学反思
2014/02/01 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
《春酒》教学反思
2016/02/22 职场文书
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server