题目描述

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。

给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

示例1

输入

[1,3,5,2,2],5,3

返回值

2
public class FindKth {public int findKth(int[] a, int n, int K) {return find(a, 0, n-1, K);}//递归寻找数组中第K大的元素private int find(int[] a, int low, int high, int K) {int pivot = partition(a, low, high);if(pivot + 1 < K)//中轴位置少于K个,在右子数组中继续查找return find(a, pivot+1, high, K);else if(pivot + 1 > K)//中轴位置大于K个,在左子数组中继续查找return find(a, low, pivot-1, K);else//中轴元素正好是第K大的元素return a[pivot];}//将数组划分为两部分,左边较大,右边较小private int partition(int[] a, int low, int high) {// 将数组首元素作为每一轮比较的基准int pivotValue = a[low];while (low < high) {// 从右往左扫描,直到遇到比基准元素小的元素while (low < high && a[high] <= pivotValue)--high;// 将右子数组中不合格的元素放到左边不合格元素的位置(原元素已经移走)a[low] = a[high];// 从左往右扫描,直到遇到比基准元素大的元素while (low < high && a[low] >= pivotValue)++low;// 将左子数组中不合格的元素放到左边不合格元素的位置(原元素已经移走)a[high] = a[low];}// 将基准元素放到中间位置a[low] = pivotValue;// 返回数组的中轴位置return low;}

牛客 寻找第k大数字相关推荐

  1. [C++日常小题] 寻找第k大数字(numberk)

    Description 经过长时间的筹备工作,在Jourk,Ronny,Plipala,阿长,阿沈等人的努力下,DM实验室建立起自己的系列网站,其中包括三个大板块:DMOJ首页.DMOJ论坛.DMOJ ...

  2. 牛客题霸 [寻找第K大] C++题解/答案

    牛客题霸 [寻找第K大] C++题解/答案 题目描述 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的 ...

  3. 寻找第K大 --- 牛客网

    寻找第K大 题目链接 描述 代码 题目链接 https://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf 描述 ...

  4. 面试官:海量无序数据,寻找第 K 大的数,越快越好

    最近在参加阿里云举办的<第三届数据库大赛创新上云性能挑战赛--高性能分析型查询引擎赛道>,传送门: https://tianchi.aliyun.com/competition/entra ...

  5. 海量无序数据寻找第 K 大的数

    前言 最近在参加阿里云举办的<第三届数据库大赛创新上云性能挑战赛--高性能分析型查询引擎赛道>,传送门:https://tianchi.aliyun.com/competition/ent ...

  6. 寻找第K大元素的八大算法、源码及拓展

    寻找第K大元素的八大算法.源码及拓展 http://www.cnblogs.com/bethunebtj/p/4861378.html 一.问题描述 所谓"第(前)k大数问题"指的 ...

  7. 牛客题霸 [回文数字(palindrome-number)] C++题解/答案

    牛客题霸 [回文数字] C++题解/答案 题解: 首先:负数不可以回文(起码看着就不对称) 然后我们将x翻转,很简单sum=sum*10+x%10; 因为x最终会变成0,所以用y先存一下x 最后比较s ...

  8. java中二叉树中第k大的数,寻找第k大的数

    目录: 1.引子 2.排序解决法 3.类快排解法 4.最小堆解法 1.引子 日常编码中,常见遇到这样的问题,"寻找最大的数",此问题非常容易,可暴力直接遍历找出,也可使用分冶策略找 ...

  9. 46最小的k个数 47寻找第k大

    46 最小的k个数 第一反应排序的话是O(nlogn),暴力是O(NK),看了题解用优先队列,因为优先队列插入元素需要logn,我们只要让堆的大小控制在k,插入一个元素就值需要logk,这样整体的时间 ...

最新文章

  1. 机器学习03-神经网络
  2. 超阿里、大华,澎思科技行人再识别(ReID)技术刷新三大数据集记录
  3. 东汉末年,他们把「服务雪崩」玩到了极致
  4. 相同命名空间相同类名的程序集间引发的致命错误
  5. 高性能的JavaScript--加载和执行
  6. C++ eof()函数陷阱
  7. 修正wme输出的ASF流数据
  8. Educational Codeforces Round 24 E. Card Game Again(双指针)
  9. vue element form 默认校验
  10. 大数据入门初学者需要学习的内容及学习路线详解
  11. linux上clion使用教程,linux clion使用教程
  12. 含有一个量词的命题的否命题_高一 | 数学必修一全称量词与存在量词知识点总结...
  13. unity3D中导出webgl并使用js进行交互
  14. 【语言处理与Python】2.1获取文本语料库
  15. Delphi惹谁了?
  16. java 坦克大战画坦克_【JAVA语言程序设计基础篇】--JAVA实现坦克大战游戏--画出坦克(二)...
  17. 系统线性、时不变、因果判断
  18. 牛顿法和牛顿下山法求极值的理解
  19. ADN FDN SDN
  20. java食堂外卖系统,java毕业设计_springboot框架的饭堂外卖系统

热门文章

  1. 人工智能之注意力模型
  2. mysql字符集设置
  3. gridview repeater DataList 鼠标经过改变背景颜色
  4. 服务器稳定秒解是什么意思,高防秒解服务器特性以及如何实现秒解封
  5. LeetCode刷题系列-- 174. 地下城游戏
  6. elasticsearch win7集群配置python测试
  7. webpack 的externals配置 (externals有啥用)
  8. 拯救懒癌晚期,拖延症晚期---番茄工作法
  9. python git是什么_使用gitpython解析git日志
  10. python编程快速上手项目答案-python编程快速上手之第5章实践项目参考答案