【算法】O(1)空间,不改变原数组的情况下找第K大的数

本文总结了在O(1)空间且不改变原数组的条件下,如何找到无序数组中第K大的数。通常使用小顶堆和快排分治方法,但面试中被问到严格的O(1)空间解决方案。文章详细介绍了利用二分法的思想,通过不断查找满足条件的数来实现这一目标,时间复杂度在最坏情况下为O(nlogK)或O(n)。
摘要由CSDN通过智能技术生成

找到无序数组中第K大的数,这道题蜜汁经典,腾讯和头条的面试中都被问到了,我一般用的都是大小为K的小顶堆和快排扫一半这两种思路做这道题,直到前几天面试头条的时候,终面面试官问,有没有 O(1) 空间【严格的 O(1) 空间,即不能用递归】且不改变原数组的情况下,找第K大的数。当场没有想起来,下来之后突然就想到了。所以特此来总结一下。

找数组第K大的数 ,Leetcode上有一道原题:
215. Kth Largest Element in an Array

常规的两种方法——小顶堆和快排分治

快排扫一半

就是快排每次扫完之后,看轴值得位置在哪里,如果大于k则扫前一半,小于k则扫后一半,如果等于k则说明找到了【PS,这里的k是指从0开始数的第K大的数】
这种方法的时间复杂度,平均意义上是 O(n)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值