如何在 O(n) 的时间复杂度内查找一个无序数组中的第 K 大元素?

如何在 O(n) 的时间复杂度内查找一个无序数组中的第 K 大元素?
  • 快排的核心思想就是分治和分区,我们利用分区的思想,来解答开篇的问题:O(n)时间复杂度内求无序数组中的第K大元素。比如,4,2,5,12,3,第3大元素就是4

  • 我们选择数组区间A[0...n-1]的最后一个元素A[n-1]作为pivot,对数组A[0...n-1]原地分区,这样数组就成为了三部分,A[0...p-1]、A[p]、A[p+1...n-1]

  • 如果p+1 = K, 那A[p]就是要求解的元素;如果K>p+1,说明第K大元素出现在A[p+1...n-1]区间,我们再按照上面递归思路在 A[p+1...n-1]这个区间内查找。同理,如果 K<p+1,那我们就在 A[0...p-1]区间查找。

分类:
后端
标签: