2460 - 【基础】第k个数

题目描述

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

输入

第一行包含两个整数 n和 k。 第二行包含 n 个整数(所有整数均在 1∼10^9 范围内),表示整数数列。

输出

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

样例

输入

5 3
2 4 1 5 3

输出

3
说明

快排要点:O(nlogn) 1、找到分界点x,q[L],q[(L+R)/2],或者q[R] 2、左边所有数left<=x,右边所有数>=x 3、递归排序左边Left,递归排序右边Right

延伸:快速选择排序:时间复杂度O(n) |--------------------------------------------------|-----------------------------------------------------------| L <=x >=x R 思路:假设左边有SL个元素 ,找第k个元素 k<=SL ,递归左边,找第k个元素 k>SL,递归右边,找第k-SL个元素

1、找到分界点x,q[L],q[(L+R)/2],或者q[R]
2、左边所有数left<=x,右边所有数>=x
3、如果k<=sl递归排序左边Left,否则递归排序右边Right
标签
题目参数
时间限制 1 秒
内存限制 128 MB
提交次数 1
通过人数 1
金币数量 2 枚
统计
上一题 下一题