NC207028 第k小数
NC207028 第k小数
题目
题目描述
给你一个长度为 \(n\) 的序列,求序列中第 \(k\) 小数的多少。
输入描述
多组输入,第一行读入一个整数 \(T\) 表示有 \(T\) 组数据。
每组数据占两行,第一行为两个整数 \(n,k\) ,表示数列长度和 \(k\) 。
第二行为 \(n\) 个用空格隔开的整数。
输出描述
对于每组数据,输出它的第 \(k\) 小数是多少。
每组数据之间用空格隔开
示例1
输入
2
5 2
1 4 2 3 4
3 3
3 2 1
输出
2
3
备注
\(t \leq10 , 1\leq n\leq5\times 10^6,k\leq n\) 数列里每个数都在 \(int\) 范围内
题解
思路
知识点:排序,递归。
数据量显然使用 \(O(n\log n)\) 的排序,但是使用快排可以更加优化。
快排的原理是选定一个数值(一定是值,不是下标,因为不是按下标分界,是按值分界)作为枢轴 \(mid\) ,然后设置两个指针 \(i,j\) 同时从首尾开始遍历序列,\(i\) 找小于 \(mid\) 的元素, \(j\) 找大于 \(mid\) 的元素。每找到一组就交换它们,直到 \(i>j\),最后序列就排序为左右部分,左边比 \(mid\) 小且 \(j\) 是右端点,右边比 \(mid\) 大且 \(i\) 是左端点。
观察 \(k\) 和 \(i,j\) 的关系,若 \(k\leq j\) 则第 \(k\) 小在左边,接下来只要排左边;若 \(k\geq i\) 则第 \(k\) 小在右边,接下来只要排右边;若 \(i<k< j\) (仅在 \(i\) 和 \(j\) 同时到达值为 \(mid\) 的位置才可能出现,其他情况 \(j=i-1\) ),则目前第 \(k\) 个就是最终答案。
快读快写是题目要求 qwq。
时间复杂度 \(O(n\log n)\)
空间复杂度 \(O(n)\)
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int a[5000007];
inline int read() {
int x = 0, f = 1;
char c = getchar();
while (c < '0' || c>'9') {
if (c == '-') f = -1;
c = getchar();
}///整数符号
while (c >= '0' && c <= '9') {
x = (x << 3) + (x << 1) + (c ^ 48);
c = getchar();
}///挪位加数
return x * f;
}
int quick_sort(int l, int r, int k) {
if (l == r) return a[l];
int i = l, j = r;
int mid = a[l + r >> 1];
while (i <= j) {
while (a[i] < mid)i++;
while (a[j] > mid)j--;
if (i <= j) {
swap(a[i], a[j]);
i++, j--;
}
}///循环条件设成包括=,是为了循环完的i,j就是需要排序的严格端点。
if (k <= j) return quick_sort(l, j, k);///因为只有在(j,i)之间才是以及排好的,不包括端点
else if (k >= i) return quick_sort(i, r, k);
else return a[k];
}
bool solve() {
int n = read(), k = read();
for (int i = 0;i < n;i++) a[i] = read();
cout << quick_sort(0, n - 1, k - 1) << '\n';
return true;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
t = read();
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}
NC207028 第k小数的更多相关文章
- 第K 小数
[问题描述]有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少.[输入格式]输入文件名为number.in.输入文件包 ...
- 数组第K小数问题 及其对于 快排和堆排 的相关优化比较
题目描述 给定一个整数数组a[0,...,n-1],求数组中第k小数 输入描述 首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n 然后输出n个整形元素,每个数 ...
- Bsoj 1322 第K小数
第K小数 Description 现在已有N个整数,你有以下三种操作: 1 A:表示加入一个值为A的整数: 2 B:表示删除其中值为B的整数: 3 K:表示输出这些整数中第K小的数: Input 第一 ...
- 算法打基础——顺序统计(找第k小数)
这次主要是讲如何在线性时间下找n个元素的未排序序列中第k小的数.当然如果\(k=1 or k=n\),即找最大最小 数,线性时间内遍历即可完成,当拓展到一般,如中位数时,相关算法就值得研究了.这里还要 ...
- 查找第K小数
题目描述 查找一个数组的第K小的数,注意同样大小算一样大. 如 2 1 3 4 5 2 第三小数为3. 输入描述: 输入有多组数据.每组输入n,然后输入n个整数(1<=n<=1000), ...
- OJ2237第k小数题解
题目描述: 有n个数,请你找出第k小的数. 输入描述: 第一行有2个正整数n,k(n,k<=10^7)第二行有n个非负数ai(ai<=10^5) 输出描述: 输出第k小的数. 输入样例: ...
- 【递归打卡2】求两个有序数组的第K小数
[题目] 给定两个有序数组arr1和arr2,已知两个数组的长度分别为 m1 和 m2,求两个数组中的第 K 小数.要求时间复杂度O(log(m1 + m2)). [举例] 例如 arr1 = [1, ...
- 两个有序数组的上中位数和第K小数问题
哈,再介绍个操蛋的问题.当然,网上有很多解答,但是能让你完全看懂的不多,即便它的结果是正确的,可是解释上也是有问题的. 所以,为了以示正听,我也做了分析和demo,只要你愿意学习,你就一定能学会,并且 ...
- 2018.07.08 NOIP模拟 第K小数(二分)
第K小数 题目背景 SOURCE:NOIP2016-AHSDFZ T1 题目描述 有两个正整数数列,元素个数分别为 N 和 M .从两个数列中分别任取一个数相乘,这样一共可以得到 N*M 个数,询问这 ...
随机推荐
- Java语言学习day06-7月05日
今日内容介绍流程控制语句之循环语句循环高级###10for循环_1 * A: for循环_1 * a: 使用格式 for(初始化变量 ; 条件 ; 增量){ 循环体; } * b: 各模块解释 初始化 ...
- JVM垃圾回收篇
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 基础概念 GC=jvm垃圾回收,垃圾回收机制是由垃圾回收器Garbage ...
- HTTP协议4.14
测试开发学习笔记 一. Saas software as a service 软件即服务 Platform as a service 平台即服务 单体架构---垂直架构---面向服务架构---微服务架 ...
- 【HashMap】浅析HashMap的构造方法及put方法(JDK1.7)
目录 引言 代码讲解 属性 HashMap的空参构造方法 HashMap的put方法 put inflateTable initHashSeedAsNeeded putForNullKey hash ...
- 项目实战:rsync+sersync实现数据实时同步
一.组网介绍 本次实验使用两台主机: qll251 角色:Rsync server + Sersync server qll252 角色: Rsync client 本次实验采用CentOS7.7系统 ...
- 干货 | Nginx负载均衡原理及配置实例
一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 理解正向代理与反向代理的区别 ...
- 阿里新零售中的智能补货(I)— 库存模型
文章作者:阿里零售通算法团队 出品社区:DataFun 导读: 零售通作为阿里巴巴新零售的八路大军之一,肩负着"共建智能分销平台"和"让百万小店拥抱DT时代"的 ...
- IDEA通用配置
文件的自动author注释
- 面试简历书写、Flask框架介绍与快速使用、Flask演示登录页面、用户信息页面案例
今日内容概要 面试简历编写 Flask框架介绍与安装 内容详细 1.面试简历编写 # 千万不要几个小时把简历凑出来 几天到一周 # 有没有面试机会,取决于简历写得怎么样 简历写好是第一步 # 投简历的 ...
- apache tomcat 目录session应用信息漏洞
Tomcat 是一款开源的 Web 应用服务器软件.Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不多的场合下被普遍使用,是开发和调试 JSP 程序的首选. 漏洞描述 apache T ...