python列表输入一组数找最小值_Python实现查找最小的k个数示例【两种解法】

本文介绍了Python中查找一组数中最小的K个数的两种方法。第一种方法使用partition函数,时间复杂度为O(N),但会改变数组顺序。第二种方法利用堆数据结构,时间复杂度为N*O(logK),空间和时间效率优于第一种。
摘要由CSDN通过智能技术生成

本文实例讲述了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值