题目来自牛客网
https://www.nowcoder.com/practice/097ab63cffa847d89716f2ca8c23524f?tpId=90&tqId=30914&tPage=7&rp=7&ru=/ta/2018test&qru=/ta/2018test/question-ranking

两种方法,方法一:使用快排,经过一轮之后,元素temp被放到中间,前面的小于等于它,后面的大于等于它,如果元素temp的位置是i(从0开始),那么temp为第i+1小的数,本题求第k大的数,所以i=len-k(在代码中对应int k = len - scanner.nextInt();),len为数组中元素个数。如果temp的位置小于i,那么,往后找,如果大于i,往前找,相等,temp即为所求。
方法二:求第k大数,使用小顶堆,堆中有k个元素,堆顶元素为当前的第k大数,如果堆中不足k个元素,直接入堆,否则,如果大于堆顶,删除堆顶,这个数入堆。最后,堆顶元素即为所求。
代码如下:

import java.util.*;public class Solution139 {//使用小顶堆public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String[] strs = scanner.nextLine().split(" ");int len = strs.length;int[] num = new int[len];for (int i = 0; i < len; i++) {num[i] = Integer.parseInt(strs[i]);}int k = scanner.nextInt();scanner.close();//PriorityQueue是用堆实现的,默认就是小顶堆PriorityQueue<Integer> queue = new PriorityQueue<>(k);for (int i = 0; i < len; i++) {if (queue.size() < k) {queue.offer(num[i]);} else if (num[i] > queue.peek()) {queue.poll();queue.offer(num[i]);}}System.out.println(queue.peek());}//使用快排的思想public static void main2(String[] args) {Scanner scanner = new Scanner(System.in);String[] strs = scanner.nextLine().split(" ");int len = strs.length;int[] num = new int[len];for (int i = 0; i < len; i++) {num[i] = Integer.parseInt(strs[i]);}int k = len - scanner.nextInt();scanner.close();int begin = 0;int end = len - 1;int index = aTurnQuickSort(num, begin, end);while (index != k) {if (index < k) {begin = index + 1;index = aTurnQuickSort(num, begin, end);} else {end = index - 1;index = aTurnQuickSort(num, begin, end);}}System.out.println(num[index]);}public static int aTurnQuickSort(int[] num, int begin, int end) {int i = begin;int j = end;int temp = num[i];while (i < j) {while (i < j && num[j] >= temp) {j--;}num[i] = num[j];while (i < j && num[i] <= temp) {i++;}num[j] = num[i];}num[i] = temp;return i;}}

整数无序数组求第k大数相关推荐

  1. 整数无序数组求第K大数(暴力|快排) - 滴滴出行2018校园招聘内推笔试-研发工程师

    时间限制:1S 空间限制:32768K 题目描述: 给定无序整数序列,求第K大的数,例如{45,67,33,21},第2大的数为45 输入描述: 输入第一行为整数序列,数字用空格分割,如:45 67 ...

  2. 无序数组求第k大的数 python_整数无序数组求第K大数

    import java.util.Scanner; /** * 类似与求第k小的问题 * 求第k大相当于求第n-k+1小,n为数组长度 * * 著名的BFPRT算法可保证在线性时间内得到结果. * h ...

  3. 无序数组求第K大/第K小的数

    方法一:quicksort 根据快排思想,从后往前找比基准数小的,交换位置. 从前往后找比基准数大的,交换位置. 最后安放基准数. 保证 l到p 是大数,若 p-l+1==k 那么p就是第K大 若 p ...

  4. 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数

    使用堆 import heapq def findKthLargest(nums, k): stack = [] for num in nums: heapq.heappush(stack, num) ...

  5. 线性时间复杂度求数组中第K大数

    求数组中第K大的数可以基于快排序思想,步骤如下: 1.随机选择一个支点 2.将比支点大的数,放到数组左边:将比支点小的数放到数组右边:将支点放到中间(属于左部分) 3.设左部分的长度为L, 当K &l ...

  6. 单峰数组求第k大算法

    单峰数组实际上可以看成两个有序的数组,这个问题就转变成了两个有序数组求第k大. 容易想到的算法是对这两个数组进行归并,生成一个新的有序数组,求出第k大之后就可以立刻停止,复杂度是O(k)的. 但是还有 ...

  7. 求无序数组的第K(大/小)数的三种方法

    题目描述:给定一个无序数组(长度为n)和一个正整数 K,让你求此数组中第K大的数 方法1:最简单的思路,你肯定会想到 先把数组排序,然后再取下标为K的对应数组元素.这种方法肯定是可行的,但是这种方法无 ...

  8. c++求区间第k大数_数组中求第K大数的实现方法

    问题:有一个大小为n的数组A[0,1,2,-,n-1],求其中第k大的数. 该问题是一个经典的问题,在<算法导论>中被作为单独的一节提出,而且其解决方法很好的利用了分治的思想,将时间复杂度 ...

  9. 在一个无序的int数组上构建一个最小堆的时间复杂度_漫画:寻找无序数组的第k大元素(修订版)...

    ----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第二大的元素是20,第三大的元 ...

最新文章

  1. VS.NET 控件命名规范(备忘)
  2. PIC中实现printf函数出现:Warning [2066] type qualifier mismatch in assignment
  3. 谈VHDL/Verilog的可综合性以及对初学者的一些建议
  4. XCTF-MISC-新手区-SimpleRAR
  5. html 5 本地数据库(Web Sql Database)
  6. 秒后面的单位是什么_为什么兰州马拉松很难跑出好成绩?
  7. 【个推CTO谈数据智能】之本质及技术体系要求
  8. mimakatz用法_两步完成利用procdump64+mimikatz获取win用户密码
  9. JavaScript获取距离某天前或后的日期
  10. 【爬虫剑谱】二卷4章 实战篇-模拟登录铁路12306网站(滑块验证)
  11. KMP算法总结+Next数组+Nextval数组
  12. V神演讲干货全送上!关于以太坊2.0,你想知道的都在这里!
  13. 电大计算机网络模拟题及答案,最新国家开放大学电大本科《计算机网络》期末题库及答案...
  14. this kernel requires an x86-64 CPU, but only detected an i686 CPU
  15. 用new/delete动态创建数组| 一维/二维/三维
  16. [转]通过秘钥实现scp不输入密码传送文件
  17. 获取指定路径,扫描路径下指定类(仿Spring)
  18. CCS 6.0 下载
  19. 第六次团队作业——Alpha冲刺之事后诸葛亮
  20. python之 logging模块详细使用【转载】

热门文章

  1. 自动备份android,Android自动备份错误
  2. C#开发自己的Web服务器
  3. 基于激光视觉传感器的工业机器人焊缝跟踪系统的优缺点
  4. android rtmp推流,Android使用libRtmp直播推流
  5. “background-image:url(data:image”data类型的Url格式简介
  6. Beaver's Calculator(蓝桥杯 算法训练)sort排序
  7. 隐藏17年的Firefox文件窃取漏洞,可结合WhatsApp钓鱼窃取文件
  8. 虚拟机M0n0wall软件防火墙配置
  9. Android性能优化之启动优化实战篇,系列篇
  10. 建设一个SaaS平台需要知道什么,做什么