期末考完了,博客继续更新。 题目链接点这儿 O(n)求数列第K大和O(n)求数列第K小的思路一样,利用分治求解。 算法思路很简单,我们从数列里挑一个数,然后看比它大和比它小的元素各有多少。如果比它小的恰为k-1个,那么这个元素就是第K小,若小于,那么就从比它大的数里找第k-x-1小(x为比它小的元素个数)。若大于,则在比它小的数里找第k小。 这个算法的均摊复杂度为O(n)。 当然我们也可以用algorithm里的nth_element()函数,详细看这里。