洛谷-P1923 【深基9.例4】求第 k 小的数-普及-
P1923 【深基9.例4】求第 k 小的数
题目描述
输入 nnn(1≤n<50000001 \le n < 50000001≤n<5000000 且 nnn 为奇数)个数字 aia_iai(1≤ai<1091 \le a_i < {10}^91≤ai<109),输出这些数字的第 kkk 小的数。最小的数是第 000 小。
请尽量不要使用 nth_element
来写本题,因为本题的重点在于练习分治算法。
输入格式
第一行有两个整数,分别表示 nnn 和 kkk。
第二行有 nnn 个整数,第 iii 个数表示 aia_iai。
输出格式
一个整数,表示第 kkk 小的数。
输入输出样例 #1
输入 #1
5 1
4 3 2 1 5
输出 #1
2
solution
可以用nth_element()函数,其本质上是快速排序的一部分,时间复杂度接近O(n)
代码
#include "iostream"
#include "math.h"
#include "algorithm"
#include "string.h"
#include "unordered_set"using namespace std;
const int N = 5e6;
int A[N];int main() {int n, k;cin >> n >> k;for (int i = 0; i < n; i++) scanf("%d", &A[i]);nth_element(A, A + k, A+n);cout << A[k];return 0;
}