寻找最小的K个数 python实现

Python找出最小的K个数实例代码 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复杂度性的考虑。以下几种思路当是笔者抛砖引玉,如果读者有兴趣可以自己再使用其他方法一一尝试。 思路1:利用冒泡法 临近的数字两两进行比较,按照从小到大的顺序进行交换,如果前面的值比后面的大,则交换顺序。这样一趟过去后,最小的数字被交换到了第一位;然后是次小的交换到了第二位,。。。,依次直到第k个数,停止交换。返回lists的前k个数(lists[0:k],前闭后开) 思路2:使用快排中的partit 立即下载
寻找最小的k个数
题目描述:5.查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。

例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。


思路来自结构之法http://blog.youkuaiyun.com/v_july_v/article/details/6370650


方法一:

建K个元素的最大堆,Xmax为堆顶元素,然后遍历余下的n-k个元素,如果大于Xmax,与其交换,更新堆。所以时间复杂度为O(n*logk)

#!/usr/bin/env python
# -*- coding: utf-8 -*
#查找最小的k个树

def heapAdjust(A, i, length):
	pa = i
	child = 2*i + 1
	tmp = A[i]
	while child < length:
		if child < length-1 and A[child] < A[child+1]:
			child += 1
		if A[pa] >= A[child]:
			break
		else:
			A[pa],A[child] = A[child],A[pa]
			pa = child
			child = 2*pa + 1


def findKmin(A, k, length):
	for i in range(k/2)[::-1]:
		heapAdjust(A, i, k)
	print 'The heap is :', A[:k]
	for i in xrange(k,length):
		if A[i] < A[0]:
			A[i],A[0] = A[0],A[i]
			heapAdjust(A, 0, k)
	print 'The result is :', A[:k]

if __name__ == '__main__':
	A = [6,3,7,2,9,1,4,5,11,10,8]
	lens = len(A)
	findKmin(A, 10, lens) 

方法二:

类似快速排序。如果主元随机选取或者五化中项的中项,时间复杂度可以达到O(n)。

下面的算法不是找最小的k个值,而是寻找第k大的值,找到了第k大的值,因为之前已经经过了快拍,所以找到最小的k个值也就不难了,时间复杂度可以达到线性的复杂度。详情请参考http://blog.youkuaiyun.com/v_july_v/article/details/6403777。

首先利用快速排序将数组A化分为A[0:m],A[m+1,length-1]

if par == k-1:
    return A[par]
elif k-1 < par:
    return findKth(s, 0, par-1, k)
else:
    return findKth(s, par+1, n, k)
完整代码如下:


#!/usr/bin/env python
# -*- coding: utf-8 -*
#利用q_select查找第k大的值
def partition(s, m, n):
	#s is a list
	key = s[n-1]
	l,r = m,n-2
	while True:
		while l <= n-2 and s[l] <= key:
			l += 1
		while r>= m and  s[r] > key:
			r -= 1
		if l < r:
			s[l],s[r] = s[r],s[l]
		else:
			break
	s[l],s[n-1] = s[n-1],s[l]
	return l

def medin3(s, m, n):
	md = m + (n-m)/2
	if s[m] > s[md]:
		s[m],s[md] = s[md],s[m]
	if s[m] > s[n]:
		s[m],s[n] = s[n],s[m]
	if s[md] > s[n]:
		s[md],s[n] = s[n],s[md]
	s[md],s[n-1] = s[n-1],s[md]
	return s[n-1]

def findKth(s, m, n, k):
	if k-1 > n or  k-1 < m:
		return False
	if m<=n:
		medin3(s, m, n)
		par = partition(s, m, n)
		if par == k-1:
			return A[par]
		elif k-1 < par:
			return findKth(s, 0, par-1, k)
		else:
			return findKth(s, par+1, n, k)
	


if __name__ == '__main__':
	A = [6,3,7,2,9,1,4,5,11,10,8]
	lens = len(A)
	print findKth(A, 0, lens-1, 6) 



【论文阅读】High-Resolution Image Synthesis with Latent Diffusion Models 为了降低训练扩散模型的算力,LDMs使用一个Autoencoder去学习能尽量表达原始image space的低维空间表达(latent embedding),大大减少需要的算力。在RGB空间:编码器encoder:,将x压缩成低维表示解码器decoder: D,将低维表示z还原成原始图像空间。1. 加入Autoencoder(上图中左侧红色部分),使得扩散过程在latent space下,提高图像生成的效率; 阅读详情

相关推荐

WIFI中CSI的读取

学习目标: 目前正在做基于WIFI的无设备定位,准备使用信道状态信息(CSI),学习一下。 目前采集数据环境已经搭建好,准备研究信号的预处理。 学习内容: 1、 信号的读取——read_bf_file函数的研究 2、 3、 4、 1. read_bf_file详解: %READ_BF_FILE Reads in a file of beamforming feedback logs. % This version uses the *C* version of read_bfee, ...

sz3076799的博客 8892

最小的k个数python实现

一、问题:最小的K个数 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 二、解题思路 思路1:最简单的方案,对数组进行排序,取最小的k个 思路2:借鉴快速排序的思想,找partition的基准点povit,比较povit和k值的大小 思路3:大数据处理的思想,创建一个大小为k的数据容量,如果容器未满,直接存入容器中,如果容器已满, 和最大值进行比较,替换 思路4:构建堆,返回最小的k个元素 三、程序实现 impor

霜叶的博客 1676

电芯外观及体系设计(Cell Design)-①容量平衡设计(Cell Balance Design)

全面获取并正确解读客户需求,将需求进行分解和预判,结合公司现有资源、技术,给出设计方案。一个优秀的电芯设计方案,应该是稳健的,可操作的,满足客户需求的同时,并能为公司带来较多利润。电芯设计需同时考虑周期,性能,品质,加工性,成本,及安全与稳健性。设计人员时刻要有成本控制观念,但利润则是由公司战略所决定。

FDC1303864002的博客 1352

堆排序——最小的k个数(python)

一. 题目描述 输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 示例 1: 输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1] 示例 2: 输入:arr = [0,1,2,1], k = 1 输出:[0] 限制: 0 <= k <= arr.length &l...

oyall520的博客 1508

CloudCompare 和 PCL:点云网格化分析与处理

点云网格化是将点云数据转化为规则网格的过程,其主要思想是将离散的点云投影到一个平面上,然后对该平面进行划分,形成一系列小区域。在点云网格化方面,PCL 提供了各种算法和工具,可以实现高效的点云网格化操作。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化算法参数,如搜索半径和最大三角形边长等,执行了网格化操作,最后将网格化结果保存到输出文件中。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化参数,如分辨率等,执行了网格化操作,最后将网格化结果保存到输出文件中。

TechPulseZ的博客 1291

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1216

最小K个数--python

#输入n个整数,找出其中最小的k个数 #思路1:冒泡排序:相邻这个数两两比较,按从小到大顺序交换 def findMin_k(arr,k): length = len(arr) for i in range(k): for j in range(i+1,length): if arr[i]>arr[j]: arr[i],arr[j] = arr[j],arr[i] r...

weixin_45947707的博客 287

[AI8051U入门第一步]环境安装和按键控制流水灯

本文介绍了AI8051U单片机的开发环境搭建及GPIO应用。主要内容包括:1)通过ISP软件完成Keil开发环境配置;2)AI8051U特性介绍,包括32位8051内核、浮点运算单元及丰富外设;3)GPIO输入输出模式解析,并附流水灯控制代码;4)提供完整的系统初始化、延时函数及LED控制代码实现。文章配套资源包含完整工程代码,适用于智能硬件及物联网开发。

sinat_58149788的博客 671

查找K个最小的元素------Python版

查找k个最小元素

weixin_55816481的博客 1700

【EDA Tools】Spyglass 检查 Verilog 和 SystemVerilog 混合语言及 Lint 检查

Spyglass可以用于检查混合设计中的语言互操作性和一致性问题。对于设计中包含多种硬件描述语言的情况,Spyglass 能够识别并解析其中的模块及其互连,并对其进行验证。例如,在包含 Verilog 和 VHDL 的混合设计中,Spyglass 会自动识别并解析 Verilog 和 VHDL 文件及其相互连接。通过运行 Spyglass Lint 功能,可以检查混合设计中的语言一致性问题,例如不兼容的数据类型、互操作性问题以及其他可能导致设计故障或不一致的问题。

记录学习历程 5080

081、空间降噪(Spatial Denoise)实战:双边滤波、非局部均值与BM3D在ISP中的调优

调参时,别只看PSNR/SSIM。找几个典型场景(夜景、人像、文字、天空),在真实设备上肉眼对比。我见过PSNR涨了2dB但图像看起来更差的案例——因为PSNR不惩罚纹理丢失。空间降噪这块,理论说再多,不如动手调一次。下次遇到噪点问题,先别急着上BM3D,试试双边滤波的自适应参数,说不定有惊喜。

zzfmlxs的博客 46

Python 输入n个整数,输出其中最小的k个(华为机试)

Python 输入n个整数,输出其中最小的k个(华为机试) map(func, seq1[, seq2...]) string.join()

qq_812605813的博客 1786

手把手教你学Simulink——基于Simulink的前馈解耦SVPWM整流器仿真

本文详细介绍了基于Simulink的前馈解耦SVPWM整流器仿真方法。针对三相PWM整流器存在的dq轴交叉耦合问题,提出前馈解耦控制方案,通过在电流环中引入耦合电压补偿项,显著提升系统性能。文章包含完整的系统架构、核心算法、Simulink建模步骤及参数设置,仿真结果显示:电流跟踪误差<2%、动态响应时间<0.05s、THD<3%、功率因数>0.999。同时提供了可直接复用的MATLAB代码和工程优化建议,为电力电子工程师实现高精度AC/DC转换提供了实用解决方案。

MHD0815的博客 108

牛客网算法题:寻找最小的K个数 (python实现)

题目描述: 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 范例: 输入:[4,5,1,6,2,7,3,8],4 输出:[1,2,3,4] 思路: 我们只需要将数组排好序,然后进行切片即可,然后对于数组长度小于K的则需返回空 代码: class Solution: def GetLeastNumbers_Solution(self, tinput, k): tinput.sort() res

kingJamesbond的博客 840

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LeetCode刷题 剑指 Offer 40-简单-最小的k个数

LeetCode刷题 剑指 Offer 40-简单-最小的k个数

布小禅的博客 1475

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最小的k个数

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 解答 先排序,再返回最小的k个数 # coding:utf-8 class Solution: def GetLeastNumbers_Solution(self, tinput, k): # write code here ...

aaronthon的博客 157

牛客网剑指offer刷题——最小的K个数python实现

1.题目要求: 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 2.题目分析: 首先新建空列表,然后从大到小添加K个不同的数字,然后再向列表添加时要更新列表,比列表最后一个值大的不添加,比列表最后一个值小的要将最后一个值删除并将此数添加到合适的位置。 3.python实现: # -*- coding:utf-8...

jiaxing.Du的博客 433

剑指offer:最小的k个数(C++/Python)

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 C++ class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int...

zzz123pp的博客 175

剑指Offer 40.最小的k个数(Python)

题目描述 输入n个整数,找出其中最小的k个数。 示例: 输如4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 解题思路 排序 直接将n个整数排序,返回前k个数。时间复杂度是O(nlogn)O(nlogn)O(nlogn)。 class Solution: def GetLeastNumbers_Solution(self, tinput, k): ...

ChungChinKei' blog 152

在哪里能收到python实例代码-Python找出最小的K个数实例代码

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复杂度性的考虑。以下几种思路当是笔者抛砖引玉,如果读者有兴趣可以自己再使用其他方法一一尝试。思路1:利用冒泡法临近的数字两两进行比较,按照从小到大的顺序进行交换,如果前面的值比后面的大,则交换顺序。这样一趟...

weixin_37988176的博客 396

数组中求最小K个数

原文来源:https://juejin.im/post/5dff2791f265da33cf1add57 题目: 输入n个整数,找出其中最小的K个数。 示例: 例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 思路: 满足海量数据找top k,由于内存大小有限,不能一次读入海量数据。 因此建立一个大小为k的容器,不断更新此容器即可。时间复杂度为o(...

zhw864680355的博客 326

最小的K个数

时间限制:1秒 空间限制:32768K 热度指数:214405本题知识点: 数组 算法知识视频讲解题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。C++实现:class Solution { public: vector&lt;int&gt; GetLeastNumbers_Solution(vector&l...

请叫我小皇帝 的博客 218

【剑指offer】最小的k个数

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解题方法 先利用冒泡排序,在输出前K个数 # -*- coding:utf-8 -*- class Solution: def GetLeastNumbers_Solution(self, tinput, k): # write c...

toda666的博客 171

剑指offer-题30:最小的k个数

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 实验平台:牛客网 解决思路: 注:java中有一个数据结构是PriorityQueue,即优先队列。优先队列的元素默认按照其自然顺序进行排序,即默认为最小堆,若果需要实现最大堆,需要定义一个比较器,定义方式如下(其中k是优先队列的初始容量,若不...

FREEMAN 276

剑指offer系列28之最小的k个数

要求 时间限制:1秒 空间限制:32768K 热度指数:357881 本题知识点: 数组 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 思路 几种排序算法被写在了一起。 思路一:快排 C++实现 运行时间:3ms 占用内存:504k 思路二:堆排序 C++实现 运行时间:4ms 占用内存:468k ...

xiayangmian4130的博客 179

剑指offer 最小的k个数

题目 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 思路 partition 代码 # -*- coding:utf-8 -*- class Solution: def partition(self, tinput, left, right): leftIndex = left ...

SparkSnail 226
上一篇: 字符串包含问题 python实现
下一篇: 寻找和为定值的两个或多个数
「已注销」
博客等级 码龄15年 5粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值