描述

有一个整数数组,请你根据快速排序的思路,找出数组中第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大的数相关推荐

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

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

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

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

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

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

  4. 快速排序 寻找第K大的数

    对于海量不确定数据,可采用维护大小为K的最小堆不断更新前K大的数 但对于数量有限的数组,可采用快速排序的思想寻找第K大的数,时间复杂度为O(lgN) 即快排之后, 若K刚好为基准点下标,那么返回基准点 ...

  5. 【算法】寻找第k大的数

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

  6. [转] 寻找第k大的数

    原文地址:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个 ...

  7. c++求区间第k大数_寻找第K大的数的方法总结

    今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...

  8. 寻找第k大的数的方法总结

    转自:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的 ...

  9. 算法-寻找第K大的数的方法总结

    转载:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 解法3: void findKthBigger(vector<i ...

  10. C++——寻找第k大的数

    给出一个数组,找出数组的第k大的数:基于快速排序的思路,每次快排后,基准的左边都是比其小的数,右边都是比其大的数,一次快排结束后,若基准所处的位置正好是第k大(即基准右边有k-1个数据),则返回基准值 ...

最新文章

  1. Firefox3 RC1颁布各种新特征发扬阐发更平定
  2. 爱奇艺效果广告的个性化探索与实践
  3. (下)python3 selenium3 从框架实现代码学习selenium让你事半功倍
  4. Android的Animator动画(平移,渐隐,旋转,缩放)
  5. 软考程序员资源免费分享
  6. 学生信息管理系统总体设计规划书
  7. web项目缺少web组件才能与vs一起运行,带razor语法的 asp.net web pages 2.0.0.1
  8. Oracle 11g 创建数据库
  9. 小学三年级上册计算机计划书,小学生计划书
  10. Python:PDF文件处理(数据处理)
  11. 北斗导航 | ARAIM算法初探:使用精密单点定位(PPP)技术的ARAIM:解分离
  12. 四舍六入五成双的意思
  13. c语言pm2.5检测系统,基于Arduino的PM2.5实时检测系统
  14. Introduction to Track-To-Track Fusion
  15. SpringBoot整合ElasticaSearch
  16. 数字三角形求最大路径
  17. CVPR2022: Oriented RepPoints论文模型实践(用dota数据集)
  18. PCA的Matlab实现与分析
  19. 2007年4月11日 星期三
  20. 高端vip维护服务器,vip服务

热门文章

  1. boost::math模块实现图表显示使用 Lambert W 函数计算电流的测试程序
  2. boost::math::bernoulli_b2n用法的测试程序
  3. boost::fusion::unused_type用法的测试程序
  4. GDCM:gdcm::FileAnonymizer的测试程序
  5. GDCM:gdcm::DirectionCosines的测试程序
  6. GDCM:ReadSelectedTags的测试程序
  7. GDCM:无效的DICOM文件的测试程序
  8. boost::iterator的用法测试实例
  9. boost::convert模块实现默认转换器fail失败的测试程序
  10. DCMTK:DCMTK文档