题目描述

有一个整数数组,请你根据快速排序的思路,找出数组中第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. Selenium3自动化测试——10.为百度搜索设置弹窗
  2. python是一种什么类型的编程语言-Python这么火,为什么说它不是未来的编程语言?...
  3. Struts2的properties配置文件详解
  4. XP支持4G以上物理内存的方法
  5. Android开源底部导航,一个开源JPTabBar for Android,炫酷的底部导航栏
  6. 获取网页中选中的文字
  7. 串行线路上传输数据报的非标准协议:SLIP
  8. 统一并发 I——简介
  9. Using Custom Assemblies with Reports
  10. MFC显示bmp图像
  11. 股票大作手杰西·利弗莫尔语录集锦
  12. 全国哀悼日 一段css让全站变灰
  13. ddr3ddr4 lpddr4速率_Ddr2,ddr3,ddr4内存条的读写速率
  14. 跳槽最大原因不是为钱,你信吗?
  15. php 超炫 页面,dedecms织梦后台模板,超炫界面风格
  16. 微信读书是看公众号文章的另一种选择
  17. Resultful API
  18. 在图片上涂鸦(其实就是乱画 O(∩_∩)O)
  19. SpringBoot启动时:Process finished with exit code 0解决办法
  20. 浅谈Google分布式文件系统(GFS)

热门文章

  1. 单片机与计算机连接,单片机连接电脑问题。急。
  2. GAT: 图注意力模型介绍及PyTorch代码分析
  3. 手势比心,绽放最美的烟火【内附源码】
  4. 基于BiLSTM的酒店评论文本情感分析
  5. 基于词袋模型的语言生成模型
  6. 【强化学习论文合集】三十八.2022智能体和多智能体系统国际联合会议论文(AAMAS2022)
  7. 赛迪顾问《中国政务云市场研究年度报告》发布:群雄逐鹿 华云数据成为政务云市场主力厂商
  8. 返利网站洗牌升级 大家应该怎么办啦、
  9. ceiling php,php取整函数ceil
  10. Fortinet 修复数据分析解决方案中的严重漏洞