今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值。

名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以下的方式,决定很好,推荐给大家。

所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题。

解法1: 我们可以对这个乱序数组按照从大到小先行排序,然后取出前k大,总的时间复杂度为O(n*logn + k)。

解法2: 利用选择排序或交互排序,K次选择后即可得到第k大的数。总的时间复杂度为O(n*k)

解法3: 利用快速排序的思想,从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种情况:

1. Sa中元素的个数小于k,则Sb中的第k-|Sa|个元素即为第k大数;

2. Sa中元素的个数大于等于k,则返回Sa中的第k大数。时间复杂度近似为O(n)

解法4: 二分[Smin,Smax]查找结果X,统计X在数组中出现,且整个数组中比X大的数目为k-1的数即为第k大数。时间复杂度平均情况为O(n*logn)

解法5:用O(4*n)的方法对原数组建最大堆,然后pop出k次即可。时间复杂度为O(4*n + k*logn)

解法6:维护一个k大小的最小堆,对于数组中的每一个元素判断与堆顶的大小,若堆顶较大,则不管,否则,弹出堆顶,

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

  1. python第k序列元素查找_【python】寻找数组中第k大的元素

    题目链接:https://www.nowcoder.com/question/next?pid=13956292&qid=298692&tid=26431616 方法一: 最简单直接的 ...

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

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

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

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

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

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

  5. java寻找数组中第k大的数

    快速排序思想,先找数组第k小的数,当执行一次partition函数找到index下标时,index左边的数比arr[index]小,右边的数比arr[index]大 public class Test ...

  6. java 寻找数组中第k大的值

    转载请注明来自:黄朝辉的博客 0.前言 在未排序的数组中查找第k大的数.这里不对k的值进行判断了,认为它是合法的. 1.排序 public static int findKthLargest(int[ ...

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

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

  8. Leetcode215 寻找数组中第K大的数

    题目描述 给定一个数组A,要求找到数组A中第K大的数字. 思路:对于这种题目,其实有多种解法 方法1:对数组A进行排序,然后遍历一遍就可以找到第K大的数字.该方法的时间复杂度为O(N*logN) 方法 ...

  9. 寻找数组中第K大的数,时间复杂度O(N)

    给定一个数组A,要求找到数组A中第K大的数字.对于这个问题,解决方案有不少,此处我只给出三种: 有道题目寻找第K大,我用这3种方法都做了一遍. 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大 ...

最新文章

  1. Rails源码笔记-ActiveSupport-core_ext-date
  2. 049_汉字Unicode编码范围
  3. 集合在枚举数实例化后进行了修改_(编程知识)C# 枚举与位枚举
  4. [svc][op]从历险压缩日志里网站pv uv统计
  5. BZOJ3930-莫比乌斯反演+杜教筛
  6. PLSQL_动态语句的解析(概念)
  7. matplotlib绘制正弦曲线
  8. SpringMVC里拦截器preHandle里的参数意思
  9. 手机上该怎么合并PDF?这个方法可不要错过
  10. ICPC训练联盟2021寒假冬令营(5)_2021.01.22_笔记
  11. python 数据分析day4 Pandas 之 DataFrame
  12. 客户端连接服务器超时
  13. Ubuntu子系统折腾记
  14. Excel数据透视表经典教程六《报表布局》
  15. 植物叶片——丙二醛MDA
  16. 如何有效封堵各种P2P下载软件
  17. MOOC浙江大学陈月、何钦铭老师《数据结构》学习笔记01
  18. android l camera no panorama,camera预览是闪退的有关问题
  19. 三十不发四十不富,80年的猴明年虚岁就40岁了,为娃将来有爹可拼!
  20. 一个创业者的年度反思

热门文章

  1. SpringBoot原理篇:bean的多种加载方法之 使用上下文对象regist注入bean
  2. 基于snooplog分析蓝牙连接过程,进一步学习蓝牙协议栈
  3. 社会实践报告 —我的东软之旅
  4. 消息称贾跃亭FF与第九城市将成立合资公司 分别持股50%
  5. 基于客户端与服务器快递管理系统
  6. 电脑连接交换机console口_如何通过console口连接到交换机,并查看配置
  7. 检测QQ号码是否存在
  8. 设置Chrome谷歌浏览器默认无痕模式登陆
  9. nls参数、环境变量以及函数等起作用的顺序!
  10. 华为云连接XShell