当前位置: 首页 > 面试题库 >

请问求第k大的数的方法以及各自的复杂度是怎样的,另外追问一下,当有相同元素时,还可以使用什么不同的方法求第k大的元素

楚昀
2023-03-14
本文向大家介绍请问求第k大的数的方法以及各自的复杂度是怎样的,另外追问一下,当有相同元素时,还可以使用什么不同的方法求第k大的元素相关面试题,主要包含被问及请问求第k大的数的方法以及各自的复杂度是怎样的,另外追问一下,当有相同元素时,还可以使用什么不同的方法求第k大的元素时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

首先使用快速排序算法将数组按照从大到小排序,然后取第k个,其时间复杂度最快为O(nlogn)

使用堆排序,建立最大堆,然后调整堆,知道获得第k个元素,其时间复杂度为O(n+klogn)

首先利用哈希表统计数组中个元素出现的次数,然后利用计数排序的思想,线性从大到小扫描过程中,前面有k-1个数则为第k大的数

利用快排思想,从数组中随机选择一个数i,然后将数组分成两部分Dl,Dr,Dl的元素都小于i,Dr的元素都大于i。然后统计Dr元素个数,如果Dr元素个数等于k-1,那么第k大的数即为k,如果Dr元素个数小于k,那么继续求Dl中第k-Dr大的元素;如果Dr元素个数大于k,那么继续求Dr中第k大的元素。

 

当有相同元素的时候,

首先利用哈希表统计数组中个元素出现的次数,然后利用计数排序的思想,线性从大到小扫描过程中,前面有k-1个数则为第k大的数,平均情况下时间复杂度为O(n)

 类似资料:
  • 如果您有长度的排序数组,请查找其中最小的元素。这里有一些潜在的解决方案,有些涉及最小堆或二进制搜索,但我想知道使用QuickSelect的时间复杂度是多少。如果我们简单地将每个数组连接在一起,并在组合数组上使用quickselect。 Quickselect在一般情况下以线性时间运行,但是数组的组合确实会扩展搜索空间,但它比使用合并策略更有效,因为如果选择了好的枢轴,Quickselect必然允许

  • 我使用最大堆来查找数组中的k个最大元素,如下所示: 1) 我已经构建了给定数组的前k个元素(arr[0]到arr[k-1])的最小堆MH。O(k) 2)对于每个元素,在第k个元素(arr[k]到arr[n-1])之后,将其与MH的根进行比较。 ……a)如果元素大于根,则将其设为根,并为MH调用heapify ……b)否则忽略它。 //步骤2是O((n-k)) 3)最后,MH有k个最大元素,MH的根

  • 我最近接受了一家社交媒体公司的面试,在那里我被问到了以下问题。 有k个长度为m的未排序数组。目标是在给定a 我提出了两个可能的解决方案: null 对于使用quickselect查找第b个最小元素的第一步,平均时间总共从O(km)到O(km*log(m))。第二步时间复杂度为O(km)。最后一步是在C中的第a和第b个最小元素之间寻找元素,取O((b-a)log(kb))。因此,total在时间上需

  • 我想删除一些与其他输出值相同的输出!因为Test1=Test2=Test5=Test6,所以我希望它在控制台上只显示Test1!Test3=Test4=Test7=Test8,所以我希望它只显示Test3。。。。。。。。 以下代码是我所做的: 以下是我的输出:

  • 我目前正在研究选择算法,即中位数。 我遇到了下面两个句子: 在计算机科学中,选择算法是寻找列表或数组中第k个最小数的算法; 在计算机科学中,中位数是一种近似(中位数)选择算法,经常用于为精确选择算法(主要是quickselect)提供良好的中枢,该算法选择最初未排序数组的第k个最大元素。 第k个最小/最大元素是什么意思?为了使问题更具体一点,考虑以下(未排序)数组: 例如,第五小的元素是什么?第五

  • 我有一个堆(像二叉树一样实现:每个节点都有两个指向子节点的指针和一个指向父节点的指针)。 给定第k个元素的元素数量,我如何找到它(以BFS顺序)?我认为这可以在O(logn)时间内完成。。