StkOvflow

STACK OVERFLOW!

一言(ヒトコト)

786.第k个数

题目描述

给定一个长度为 \(n\) 的整数数列,以及一个整数 \(k\),请用快速选择算法求出数列从小到大排序后的第 \(k\) 个数。

输入格式

第一行包含两个整数 \(n\)\(k\)

第二行包含 \(n\) 个整数(所有整数均在 \(1 \sim 10^9\) 范围内),表示整数数列。

输出格式

输出一个整数,表示数列的第 \(k\) 小数。

数据范围

\(1 \le n \le 100000\),
\(1 \le k \le n\)

输入样例:

    5 3
    2 4 1 5 3

输出样例:

    3

算法

(排序) \(O(nlogn)\)

std::sort排下序,然后输出排后数组中的第k个数即可

C++ 代码

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1e6 + 10;
int n, a[N], k;

int main()
{
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; i ++ ) 
        scanf("%d", &a[i]);
    
    sort(a + 1, a + 1 + n);
    printf("%d\n", a[k]);
    
    return 0;
}
posted @ 2022-12-20 13:55  StkOvflow  阅读(28)  评论(0)    收藏  举报