牛客 寻找第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,这样整体的时间 ...
最新文章
- 机器学习03-神经网络
- 超阿里、大华,澎思科技行人再识别(ReID)技术刷新三大数据集记录
- 东汉末年,他们把「服务雪崩」玩到了极致
- 相同命名空间相同类名的程序集间引发的致命错误
- 高性能的JavaScript--加载和执行
- C++ eof()函数陷阱
- 修正wme输出的ASF流数据
- Educational Codeforces Round 24 E. Card Game Again(双指针)
- vue element form 默认校验
- 大数据入门初学者需要学习的内容及学习路线详解
- linux上clion使用教程,linux clion使用教程
- 含有一个量词的命题的否命题_高一 | 数学必修一全称量词与存在量词知识点总结...
- unity3D中导出webgl并使用js进行交互
- 【语言处理与Python】2.1获取文本语料库
- Delphi惹谁了?
- java 坦克大战画坦克_【JAVA语言程序设计基础篇】--JAVA实现坦克大战游戏--画出坦克(二)...
- 系统线性、时不变、因果判断
- 牛顿法和牛顿下山法求极值的理解
- ADN FDN SDN
- java食堂外卖系统,java毕业设计_springboot框架的饭堂外卖系统
热门文章
- 人工智能之注意力模型
- mysql字符集设置
- gridview repeater DataList 鼠标经过改变背景颜色
- 服务器稳定秒解是什么意思,高防秒解服务器特性以及如何实现秒解封
- LeetCode刷题系列-- 174. 地下城游戏
- elasticsearch win7集群配置python测试
- webpack 的externals配置 (externals有啥用)
- 拯救懒癌晚期,拖延症晚期---番茄工作法
- python git是什么_使用gitpython解析git日志
- python编程快速上手项目答案-python编程快速上手之第5章实践项目参考答案