Quick Selcet,O(n)的时间复杂度内找到无序数组中的第k大的数

  • Quick Select实质是快速排序算法中的一个步骤(找出未排序数组中的任意大的元素),其中用到了分隔数组的思想,默认的分隔条件是小于等于中间元素的在左边,大于的放在右边,这样将原问题分割一半,在确定的一半空间里寻找第k大的元素。Quick Select平均情况下的时间复杂度是O(n)。相关题目:Kth Largest Element,Median(当数组长度为奇数和偶数时,其中位数是不同的)等。

 

  • Kth Largest Element in an Array,最优解法。

 

                                

 

  • Quick Select与Quick Sort有许多相似之处,不同点在于图中画红框的部分,这里是用O(n)的时间将规模为n的问题减半,判断下一步是在哪个半区中寻找第k大的元素,这里排序是按降序排的。省去了快速排序中最后的递归过程,所以时间复杂度上有所优化。

 

  • 相似题目:Median Of Two Sorted Array,将规模为n的问题经过O(1)的时间复杂度转化成规模为n/2的问题,时间复杂度是logn(举例:在班级排名第10名,要想排名上升到第五名,可以把前五名弄走),这里要让k变成k/2,要么移除A中的前k/2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值