NC88-寻找第K大的数
描述
有一个整数数组,请你根据快速排序的思路,找出数组中第K 大的数。
给定一个整数数组 ,同时给定它的大小n和要找的K ,请返回第 K大的数(包括重复的元素,不用去重),保证答案存在。
要求时间复杂度 0(n)
示例1
输入:
[1,3,5,2,2],5,3
返回值:
2
示例2
输入:
[10,10,9,9,8,7,5,6,4,3,4,2],12,3
返回值:
9
说明:
去重后的第3大是8,但本题要求包含重复的元素,不用去重,所以输出9
java代码:
import java.util.*;public class Solution {public int quicksort(int[] a,int left,int right,int K){int l=left,r=right;int key=a[left];while(r>l){while(a[r]>=key&&r>l){r--;}a[l]=a[r];while(r>l&&a[l]<=key){l++;}a[r]=a[l];}a[l]=key;//l为基准轴,l+1表示是数组中第l+1小的数if(l+1==K) {return a[l];}else if(l+1>K)return quicksort(a,left,l-1,K);else {return quicksort(a,l+1,right,K);}}public int findKth(int[] a, int n, int K) {if(a.length<K) return 0; //注意题目是寻找第K大的数,并不是第K小,排序的顺序从小到大的顺序,是第K小//所以要转换 K1=n-K+1 ,转换成第K小int value=quicksort(a,0,a.length-1,n-K+1);return value; }
}
java 题解2:
public class DemoTest {public static void main(String[] args) {//[10,10,9,9,8,7,5,6,4,3,4,2],12,3int[] a={10,10,9,9,8,7,5,6,4,3,4,2};int num=a.length;int K=3;int value=findKth(a, num, K);System.out.println(value);}public static int quicksort(int[] a,int left,int right,int K){int l=left,r=right;int key=a[left];while(r>l){while(a[r]>=key&&r>l){r--;}a[l]=a[r];while(r>l&&a[l]<=key){l++;}a[r]=a[l];}a[l]=key;int min=l-left; //min表示比基准轴l小的数有min个数,min+1代表整个数组中第min+1小的数if(min+1==K) { return a[l];}else if(min+1>K) //基准轴落在了目标值k的右边,k值不变return quicksort(a,left,l-1,K);else {//基准轴落在了目标值k的左边,k值改变,k=k-min-1,表示右半边中相对于距离l+1的位置第k-min-1小的数return quicksort(a,l+1,right,K-min-1);}}public static int findKth(int[] a, int n, int K) {if(a.length<K) return 0; //注意题目是寻找第K大的数,并不是第K小,排序的顺序从小到大的顺序,是第K小//所以要转换 K1=n-K+1 ,转换成第K小int value=quicksort(a,0,a.length-1,a.length-K+1);return value; }}
NC88-寻找第K大的数相关推荐
- 面试官:海量无序数据,寻找第 K 大的数,越快越好
最近在参加阿里云举办的<第三届数据库大赛创新上云性能挑战赛--高性能分析型查询引擎赛道>,传送门: https://tianchi.aliyun.com/competition/entra ...
- 海量无序数据寻找第 K 大的数
前言 最近在参加阿里云举办的<第三届数据库大赛创新上云性能挑战赛--高性能分析型查询引擎赛道>,传送门:https://tianchi.aliyun.com/competition/ent ...
- java中二叉树中第k大的数,寻找第k大的数
目录: 1.引子 2.排序解决法 3.类快排解法 4.最小堆解法 1.引子 日常编码中,常见遇到这样的问题,"寻找最大的数",此问题非常容易,可暴力直接遍历找出,也可使用分冶策略找 ...
- 快速排序 寻找第K大的数
对于海量不确定数据,可采用维护大小为K的最小堆不断更新前K大的数 但对于数量有限的数组,可采用快速排序的思想寻找第K大的数,时间复杂度为O(lgN) 即快排之后, 若K刚好为基准点下标,那么返回基准点 ...
- 【算法】寻找第k大的数
目录: 1.引子 2.排序解决法 3.类快排解法 4.最小堆解法 1.引子 日常编码中,常见遇到这样的问题,"寻找最大的数",此问题非常容易,可暴力直接遍历找出,也可使用分冶策略找 ...
- [转] 寻找第k大的数
原文地址:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个 ...
- c++求区间第k大数_寻找第K大的数的方法总结
今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...
- 寻找第k大的数的方法总结
转自:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的 ...
- 算法-寻找第K大的数的方法总结
转载:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 解法3: void findKthBigger(vector<i ...
- C++——寻找第k大的数
给出一个数组,找出数组的第k大的数:基于快速排序的思路,每次快排后,基准的左边都是比其小的数,右边都是比其大的数,一次快排结束后,若基准所处的位置正好是第k大(即基准右边有k-1个数据),则返回基准值 ...
最新文章
- Firefox3 RC1颁布各种新特征发扬阐发更平定
- 爱奇艺效果广告的个性化探索与实践
- (下)python3 selenium3 从框架实现代码学习selenium让你事半功倍
- Android的Animator动画(平移,渐隐,旋转,缩放)
- 软考程序员资源免费分享
- 学生信息管理系统总体设计规划书
- web项目缺少web组件才能与vs一起运行,带razor语法的 asp.net web pages 2.0.0.1
- Oracle 11g 创建数据库
- 小学三年级上册计算机计划书,小学生计划书
- Python:PDF文件处理(数据处理)
- 北斗导航 | ARAIM算法初探:使用精密单点定位(PPP)技术的ARAIM:解分离
- 四舍六入五成双的意思
- c语言pm2.5检测系统,基于Arduino的PM2.5实时检测系统
- Introduction to Track-To-Track Fusion
- SpringBoot整合ElasticaSearch
- 数字三角形求最大路径
- CVPR2022: Oriented RepPoints论文模型实践(用dota数据集)
- PCA的Matlab实现与分析
- 2007年4月11日 星期三
- 高端vip维护服务器,vip服务
热门文章
- boost::math模块实现图表显示使用 Lambert W 函数计算电流的测试程序
- boost::math::bernoulli_b2n用法的测试程序
- boost::fusion::unused_type用法的测试程序
- GDCM:gdcm::FileAnonymizer的测试程序
- GDCM:gdcm::DirectionCosines的测试程序
- GDCM:ReadSelectedTags的测试程序
- GDCM:无效的DICOM文件的测试程序
- boost::iterator的用法测试实例
- boost::convert模块实现默认转换器fail失败的测试程序
- DCMTK:DCMTK文档