牛客 寻找第k大数字
题目描述
有一个整数数组,请你根据快速排序的思路,找出数组中第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大数字相关推荐
- [C++日常小题] 寻找第k大数字(numberk)
Description 经过长时间的筹备工作,在Jourk,Ronny,Plipala,阿长,阿沈等人的努力下,DM实验室建立起自己的系列网站,其中包括三个大板块:DMOJ首页.DMOJ论坛.DMOJ ...
- 牛客题霸 [寻找第K大] C++题解/答案
牛客题霸 [寻找第K大] C++题解/答案 题目描述 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的 ...
- 寻找第K大 --- 牛客网
寻找第K大 题目链接 描述 代码 题目链接 https://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf 描述 ...
- 面试官:海量无序数据,寻找第 K 大的数,越快越好
最近在参加阿里云举办的<第三届数据库大赛创新上云性能挑战赛--高性能分析型查询引擎赛道>,传送门: https://tianchi.aliyun.com/competition/entra ...
- 海量无序数据寻找第 K 大的数
前言 最近在参加阿里云举办的<第三届数据库大赛创新上云性能挑战赛--高性能分析型查询引擎赛道>,传送门:https://tianchi.aliyun.com/competition/ent ...
- 寻找第K大元素的八大算法、源码及拓展
寻找第K大元素的八大算法.源码及拓展 http://www.cnblogs.com/bethunebtj/p/4861378.html 一.问题描述 所谓"第(前)k大数问题"指的 ...
- 牛客题霸 [回文数字(palindrome-number)] C++题解/答案
牛客题霸 [回文数字] C++题解/答案 题解: 首先:负数不可以回文(起码看着就不对称) 然后我们将x翻转,很简单sum=sum*10+x%10; 因为x最终会变成0,所以用y先存一下x 最后比较s ...
- java中二叉树中第k大的数,寻找第k大的数
目录: 1.引子 2.排序解决法 3.类快排解法 4.最小堆解法 1.引子 日常编码中,常见遇到这样的问题,"寻找最大的数",此问题非常容易,可暴力直接遍历找出,也可使用分冶策略找 ...
- 46最小的k个数 47寻找第k大
46 最小的k个数 第一反应排序的话是O(nlogn),暴力是O(NK),看了题解用优先队列,因为优先队列插入元素需要logn,我们只要让堆的大小控制在k,插入一个元素就值需要logk,这样整体的时间 ...
最新文章
- Selenium3自动化测试——10.为百度搜索设置弹窗
- python是一种什么类型的编程语言-Python这么火,为什么说它不是未来的编程语言?...
- Struts2的properties配置文件详解
- XP支持4G以上物理内存的方法
- Android开源底部导航,一个开源JPTabBar for Android,炫酷的底部导航栏
- 获取网页中选中的文字
- 串行线路上传输数据报的非标准协议:SLIP
- 统一并发 I——简介
- Using Custom Assemblies with Reports
- MFC显示bmp图像
- 股票大作手杰西·利弗莫尔语录集锦
- 全国哀悼日 一段css让全站变灰
- ddr3ddr4 lpddr4速率_Ddr2,ddr3,ddr4内存条的读写速率
- 跳槽最大原因不是为钱,你信吗?
- php 超炫 页面,dedecms织梦后台模板,超炫界面风格
- 微信读书是看公众号文章的另一种选择
- Resultful API
- 在图片上涂鸦(其实就是乱画 O(∩_∩)O)
- SpringBoot启动时:Process finished with exit code 0解决办法
- 浅谈Google分布式文件系统(GFS)