首页 > 试题广场 >

寻找第K大

[编程题]寻找第K大
  • 热度指数:355366 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数。

给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在。
要求:时间复杂度 ,空间复杂度
数据范围:,数组中每个元素满足
示例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        
头像 小橘子ღ
发表于 2021-03-23 00:32:19
TopK,得到答案并不难,但不断优化的过程,挺艰难。 题目描述: 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。 1.全局排序,时间复杂度取决于排序算法,一般是 O(n*lgn) 展开全文
头像 牛客2012号
发表于 2020-09-03 14:57:34
寻找第k大元素 import java.util.*; public class Finder { public int findKth(int[] a, int n, int K) { // write code here return findK(a, 展开全文
头像 牛客955298328号
发表于 2020-09-28 13:51:37
数组排序,没说去重,所以只要使用Arrays。sort即可import java.util.*; public class Finder { public int findKth(int[] a, int n, int K) { Arrays.sort(a); re 展开全文
头像 麻豆出品
发表于 2020-09-05 15:12:33
最近面试东京株式会社遇到这个题,特地来刷一下。思路:快排+二分,与快排不同的是,利用二分法每次都减少了一半的不必要排序。当high=low小于k的时候,在后半部分搜索,当high=low大于k的时候,在前半部分搜索。 代码: # -*- coding:utf-8 -*- import sys def 展开全文
头像 xuwenshg
发表于 2020-09-12 21:27:45
二分查找和堆查找 一、二分查找是利用快速排序的二分特点利用快排在排序时,把数组分成两部分,一部分小于一个值,另一部分大于这个值的特点将数组用快排从大到小排序,取temp值为数组的第一个数a[start],那么经过一轮调整之后,数组左边的所有值大于或等于temp,数组右边的所有值都小于或等于temp, 展开全文
头像 牛客题解官
发表于 2022-04-22 12:19:44
题目主要信息: 利用快速排序的思想寻找数组中的第k大元素 有重复数字,不用去重,也不用管稳定性与否 举一反三: 学习完本题的思路你可以解决快速排序或者分治类的问题: BM5. 合并k个有序链表 BM20. 数组中的逆序对 方法:快排+二分查找(推荐使用) 知识点:分治 分治即“分而治之”,“分” 展开全文
头像 摸鱼学大师
发表于 2021-07-16 20:11:52
思路: 题目中给到的信息: 利用快速排序的思想 有重复数字,不用去重,也不用管稳定性与否 方法一:重载sort 因为sort使用的是快速排序,因此这种方法勉强算是利用了快排思想。 这次要寻找第K大,sort函数默认递增,因此需要将其重载为递减,然后遍历到第k个。 class Solution { 展开全文
头像 我也改个名
发表于 2020-09-05 12:30:34
思路:快排+二分法像快排一样,但是每次排完需要与k进行比较,具体比较看代码。1.由于一般排序是从小到大排的;所以注意这里比较的时候是 n-i 与 k进行比较;2.或者从大到小排,则比较 i+1 与 k的大小; 代码: 1. 从小到大排序: class Finder { public: int 展开全文
头像 hello__python
发表于 2020-09-06 16:57:22
先进行快速排序得到有序序列,返回下标n-k即可 -- coding:utf-8 -- class Finder: def findKth(self, a, n, K): if n<=1: return a[0] a=self.fast_sort(a, 0, n- 展开全文
头像 1807310129-邓俊华
发表于 2021-09-16 16:24:58
# -*- coding:utf-8 -*- class Solution: def findKth(self, a, n, K): # write code here #先来个快速排序 resArr = self.quickSort(a) 展开全文