题目链接:https://www.nowcoder.com/question/next?pid=13956292&qid=298692&tid=26431616

方法一:

最简单直接的方法:先排序再找

最简单直接的想法是首先进行排序。假设元素的数量不大,比如才几千个,那就可以先进行排序,比如用快排或堆排,平均时间复杂度为O(N*logN),然后取出前k个,于是总时间复杂度为O(NlogN)+O(k)=O(NlogN)。当然这种做法是浪费了不少的时间的,因为题目只要求找出第k大的元素,而不需要数据是有序的。

方法二:

比较直接的方法:部分元素排序

https://blog.csdn.net/qq_26286193/article/details/80683004

当k比较小的时候,k趟排序是个比较不错的方法。我们只需要排序最大的k个元素即可,剩下那些元素不需要管。

最简单明了的就是在冒泡排序中只进行k趟起泡。

方法三:

快排的分治法

快速排序使用了分治法的策略。它的基本思想是,选择一个基准数(一般称之为枢纽元),通过一趟排序将要排序的数据分割成独立的两部分:在枢纽元左边的所有元素都不比它大,右边所有元素都比它大,此时枢纽元就处在它应该在的正确位置上了。在本问题中,假设有N个数存储在数组a中。

我们从a中随机找出一个元素作为枢纽元,把数组分为两部分。其中左边元素都不比枢纽元大,右边元素都不比枢纽元小。此时枢纽元所在的位置记为mid。

如果右半边(包括a[mid])的长度恰好为k,说明a[mid]就是需要的第k大元素,直接返回a[mid]。

如果右半边(包括a[mid])的长度大于k,说明要寻找的第k大元素就在右半边,往右半边寻找。

如果右半边(包括a[mid])的长度小于k,说明要寻找的第k大元素就在左半边,往左半边寻找。

num = list(map(int,input()[1:-1].split(',')))

k = 3

def quick(num,left,right,k):

low = left

high = right

base = num[left]

while low < high:

while low < high and num[high] > base:

high -= 1

num[low] = num[high]

while low < high and num[low] < base:

low += 1

num[high] = num[low]

num[low] = base

if low == k:

return num[low]

elif low < k:

return quick(num,low+1,right,k)

else:

return quick(num,left,low-1,k)

print(quick(num,0,len(num)-1,k))

python第k序列元素查找_【python】寻找数组中第k大的元素相关推荐

  1. python矩阵中找满足条件的元素_从numpy数组中取出满足条件的元素示例

    例如问题:从 arr 数组中提取所有奇数元素. input:arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) output: #> array([1, ...

  2. perl 哈希数组的哈希_第一个元素使用哈希在数组中出现K次

    perl 哈希数组的哈希 Prerequisite: Hashing data structure 先决条件: 哈希数据结构 Problem statement: 问题陈述: Find the fir ...

  3. java查找第k大的数字_[经典算法题]寻找数组中第K大的数的方法总结

    今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...

  4. 寻找数组中第k大的数

    题目:有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5,2 ...

  5. python查找第k大的数_寻找数组中第K大的数

    给定一个数组A,要求找到数组A中第K大的数字.对于这个问题,解决方案有不少,此处我只给出三种: 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大的数字.该方法的时间复杂度为O(N*logN) ...

  6. 寻找数组中第K频繁的元素

    问题是:给你一个数组,求解出现次数第K多的元素.当然leetcode上的要求是算法复杂度不能大于O(N*logN). 首先这个问题我先是在leetcode上看到,当时想了两种做法,做到一半都觉得不是很 ...

  7. 寻找数组中第k大的元素

    这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. (1)最简单直接的方法:先排序再找 最简单直接的想法是首先进行排序.假设元素的数量不大,比如才几千个,那就可 ...

  8. 经典算法题:寻找数组中第k大的元素

    这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. 扩展思考:如何处理数组中的重复元素?比如,对于数组a={1,2,2,2,3,3,3},第二大的元素应该是3还 ...

  9. php如何求同列元素之和_求得这个数组中各个元素之和

    给定一个数组: $ar = array(1,2,3,4,5); 如果要求得这个数组中各个元素之和. 方法一. 很自然的用foreach实现 ``` $sum = 0; foreach ($ar as ...

最新文章

  1. 你只使用到了 VS Code 20% 的功能?听听 VS Code 首著作者怎么说
  2. Oracle提示错误消息ORA-28001: the password has expired
  3. 怎么把本地的项目同时提交到两个仓库
  4. SSH SecureShell Client的使用
  5. amd为什么还用针脚_为什么intel处理器不用针脚,AMD还一直使用针脚呢?
  6. 【discuz x3】源代码中的sql调用
  7. MFC控件——ListCtrl控件[翻译](续)
  8. 读书笔记——数据库系统概论
  9. axios发post请求,后端接收不到参数的问题
  10. 性能测试中容易混淆的概念
  11. 智能车学习(十四)——K60单片机GPIO学习
  12. 新能源车如何走出“一票否决”的窠臼?
  13. IOS APP 发布App Store (同一开发帐号,发布N个APP)
  14. 爬虫-东北林业大学校内-中国[哈尔滨]森林博物馆-爬取所有馆藏蝴蝶图片
  15. 深圳南山区学位申请特殊住房需要的材料有哪些
  16. Python IDLE 如何设置清屏功能(清屏快捷键,亲测可用)
  17. 学校网页设计成品 基于HTML+CSS+JavaScript仿山东财经大学官网 学校班级网页制作模板 校园网页设计成品
  18. 数据库实习之报表数据分析
  19. python3 urllib 内存泄露_【专家专栏】张昊 | 从urllib2的内存泄露看python的GC
  20. 7个项目管理强力工具介绍

热门文章

  1. 计算机领域裸机是指,计算机中裸机是指什么
  2. ios emjoi java_iOS推送:Java服务器端发送表情(绘文字)
  3. SQL数据库基础知识-巩固篇一
  4. python locust 时间戳过期_Locust源码分析之runners.py模块(6)
  5. html直播源码,HTML5中的websocket实现直播功能
  6. 通过手机App控制RGB调节灯带的亮度
  7. linux的more 查看命令,linux中more命令如何查找
  8. Baklib 如何帮助企业进行知识管理
  9. java计算机毕业设计幼儿早教系统软件设计与实现MyBatis+系统+LW文档+源码+调试部署
  10. groovy 读取html文件,Groovy漂亮打印XmlSlurper从HTML输出?