两种方式可以让python实现查找最小的k个数

输入n个整数,找出其中最小的K个数。例如输入2221181109,4,5,1,6,2,7,3,8这8个数字,网上110报警平台则最小的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 = len(numbers) or k > end:

return

low, high = start, end

key = numbers[low]

while low < high:

while low = 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 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 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更优

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:SEO优化专员,转转请注明出处:https://www.chuangxiangniao.com/p/897370.html

(0)
上一篇 2025年1月4日 00:56:59
下一篇 2025年1月4日 00:04:38

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • springmvc 结合ajax批量新增的实现方法

    这篇文章主要介绍了springmvc 结合ajax批量新增的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 1. 需要注意的问题 mvc框架的处理日期问题 @ResponseB…

    2025年1月4日
    100
  • ajax异步实现文件分片上传实例代码

    这篇文章主要给大家介绍了关于ajax异步实现文件分片上传的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 前言 使用Ajax上传文件的应用场景颇多,比如上传用户…

    编程技术 2025年1月4日
    100
  • Ajax实现登录案例

    这篇文章主要为大家详细介绍了Ajax实现登录案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Ajax登录案例,供大家参考,具体内容如下 Msg package com.lbl.msg; public cl…

    2025年1月4日
    100
  • ajax post下载flask文件流以及中文文件名问题

    这篇文章主要介绍了ajax post下载flask文件流以及中文文件名问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 ajax post下载文件 后端返回文件流,flask中可使用 retur…

    编程技术 2025年1月4日
    100
  • Ajax实现文件上传功能(Spring MVC)

    这篇文章主要为大家详细介绍了Ajax实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Ajax实现文件上传的具体代码,供大家参考,具体内容如下 前端表单 和 JQuery j…

    2025年1月4日
    100
  • ThinkPHP5通过ajax插入图片并实时显示完整代码

    这篇文章主要介绍了ThinkPHP5 通过ajax插入图片并实时显示功能,本文给大家分享网站代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 单张图片上传 展示图: 完整代码:    ajax上传图片练习     …

    2025年1月4日 编程技术
    100
  • 使用ajax跨域调用springboot框架的api传输文件

    这篇文章主要介绍了使用ajax跨域调用springboot框架的api传输文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在新项目中使用的是springboot编写的api,涉及到ajax跨域请求和传输文…

    编程技术 2025年1月4日
    100
  • bootstrapselect2动态从后台Ajax动态获取数据的代码

    这篇文章主要介绍了bootstrap select2 动态从后台Ajax动态获取数据的代码,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 效果图展示: 实现方式: 前端代码: 动态多选 <sele…

    2025年1月4日
    100
  • Ajax实现二级联动菜单

    这篇文章主要为大家详细介绍了Ajax实现二级联动菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Ajax二级联动菜单的具体代码,供大家参考,具体内容如下 index.jsp 二级菜单联…

    编程技术 2025年1月4日
    100
  • 基于SpringBoot利用ajax实现上传图片功能

    这篇文章主要介绍了Spring Boot利用 ajax实现上传图片功能,本文图文实例相结合,给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 SpringBoot重写addResourceHandlers映射文件路径 @O…

    2025年1月4日
    100

发表回复

登录后才能评论

联系我们

156-6553-5169

在线咨询: QQ交谈

邮件:253000106@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

联系微信