Loading docs/basic/sort.md +1 −1 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ std::sort(a, a + n); ### 线性找第 k 大的数 找第 k 大的数,最简单的方法是先排序,然后直接找到第 k 大的位置的元素。这样做的时间复杂度是 $O(N\log N)$ ,对于这个问题来说很不划算。事实上,我们有 $O(n)$ 的解法。 找第 k 大的数(K-th order statistic),最简单的方法是先排序,然后直接找到第 k 大的位置的元素。这样做的时间复杂度是 $O(N\log N)$ ,对于这个问题来说很不划算。事实上,我们有 $O(n)$ 的解法。 考虑快速排序的划分过程,在快速排序的“划分”结束后,数列 $A[p \cdots r]]$ 被分成了 $A[p \cdots q]$ 和 $A[q+1 \cdots r]$ ,此时可以按照左边元素的个数( $q - p + 1$ )和 k 的大小关系来判断是只在左边还是只在右边递归地求解。 Loading Loading
docs/basic/sort.md +1 −1 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ std::sort(a, a + n); ### 线性找第 k 大的数 找第 k 大的数,最简单的方法是先排序,然后直接找到第 k 大的位置的元素。这样做的时间复杂度是 $O(N\log N)$ ,对于这个问题来说很不划算。事实上,我们有 $O(n)$ 的解法。 找第 k 大的数(K-th order statistic),最简单的方法是先排序,然后直接找到第 k 大的位置的元素。这样做的时间复杂度是 $O(N\log N)$ ,对于这个问题来说很不划算。事实上,我们有 $O(n)$ 的解法。 考虑快速排序的划分过程,在快速排序的“划分”结束后,数列 $A[p \cdots r]]$ 被分成了 $A[p \cdots q]$ 和 $A[q+1 \cdots r]$ ,此时可以按照左边元素的个数( $q - p + 1$ )和 k 的大小关系来判断是只在左边还是只在右边递归地求解。 Loading