C++ 输出前K大的数
1:输出前k大的数
- 查看
- 提交
- 统计
- 提问
总时间限制:
10000ms
单个测试点时间限制:
1000ms
内存限制:
65536kB
描述
给定一个数组,统计前k大的数并且把这k个数从大到小输出。
输入
第一行包含一个整数n,表示数组的大小。n < 100000。
第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。
第三行包含一个整数k。k < n。
输出
从大到小输出前k大的数,每个数一行。
样例输入
10 4 5 6 9 8 7 1 2 3 0 5
样例输出
9 8 7 6 5
首先借助了快速排序的思想,一次快速排序之后,存在一个key牌,左边的数都小于这个key,右边的数都大于key,所以只要右边的数的个数刚好等于k那么就能找到这个数,在对右边的数进行排序就行
定义arrangeRight为操作使得右边的数为k,如果右边的数大于k,那么对右边部分递归调用这个函数
如果右边的数小于k,那么对左边e-j-s个数进行操作,使得右边的数等于k
最后在对k个数进行排序,时间复杂度是O(n+klogk)
#include<iostream>
#include<algorithm>
#define N 100010
using namespace std;void swap(int &a, int &b)
{int temp = a;a = b;b = temp;
}void quicksort(int a[], int s, int e, int k)
{// s 是数组的开始,e是数组的最后一个元素,k要求的前k个最大值int m = a[s];if (s >= e)return;int i = s, j = e;while (i != j){while (j > i&&a[j] >= m){j--;}swap(a[i], a[j]);while (j > i&&a[i] <= m){i++;}swap(a[i], a[j]);}//quicksort(a, s, i - 1);//quicksort(a, i + 1, e);if ((e - j) == k){// 如果已经有k个数在key的右边,则目标完成return;}else if ((e - j) > k){// 对右边的从j到e的数进行操作quicksort(a, j, e, k);}else{// 对从s到j的数quicksort(a, s, j, e - j - k);}}int main()
{int n, k;int a[N];scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", &a[i]);scanf("%d", &k);quicksort(a, 0, n - 1, k);sort(a+n-k, a + n);for (int i = n-1; i >= n-k; i--){printf("%d\n", a[i]);}return 0;
}
C++ 输出前K大的数相关推荐
- C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。
)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...
- 信息学奥赛一本通(1235:输出前k大的数)——堆排序
1235:输出前k大的数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 12715 通过数: 4043 [题目描述] 给定一个数组,统计前k大的数并且把这 ...
- 输出前k大的数(信息学奥赛一本通-T1235)
[题目描述] 给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小.n < 100000. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...
- (分治)7617:输出前k大的数
描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小.n < 100000. 第二行包含n个整数,表示数组的元素,整数之间以一个空格分 ...
- [Hash应用问题] 例3.2 给出n个整数,按从大到小的顺序输出前m大的数
题目描述: 给出n个整数,请按从大到小的顺序输出前m大的数. 输入: 每组测试数据又两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500 ...
- yt练手1004输出前m大的数hash
Home Page DIY Contests Problems Ranklist Status Statistics 前m大的数 Time Limit : 2000/1000ms (Java/Othe ...
- n个数中输出前m大的数
描述 n个数,要求输出其中的m个最大数 想法1 开辟辅助数组,用插入排序,将前m最大数插入到辅助数组中,时间复杂度O(n*m) 想法2 类似快速排序的想法,将前m大的数都聚到最左边,再进行一次排序输出 ...
- 第k大的数python代码_【Python】【输出前m大的数】
问题: 给定一个数组包含n个元素,统计前m个大的数,并把这m大的数从大到小排列给出 输入 第一行为一个整数,表述要输出的前m个数 第二行为n个整数,给出需要排序的数组 输出 从大到小的m大的数 例子 ...
- [leetcode]堆排序 求前k大的数
前一篇博客中写到了排序算法,其中包含一个堆排序,因此本篇博客讲解堆这个数据结构及其应用. 关于最大堆最小堆以及初始建堆和整理堆在上篇博客中有提及,此处不再赘述.下面讲解一个堆的重要应用,求n个数中前k ...
最新文章
- Kubernetes v1.0特性解析
- isk麦克风安装教程_得胜麦克风怎么样?isk的麦克风怎么样?屁颠虫麦克风使用教程?得胜PC电容麦克风详细拆解...
- 复旦的新衣再登Nature!穿在身上能为手机充电,可水洗可弯折,刀戳车撵都不坏...
- android studio 设置自动编译_某小型公司持续集成工具jenkins实践(JAVA WEB、Android、IOS、html)...
- Github上Pandas,Numpy和 Scipy三个库中20个最常用的函数
- SAP CRM 产品主数据搜索alternative ID type下拉菜单的渲染逻辑
- 服务去获取配置中心配置
- svg mysql_SVG 实例
- java:数字转string 报空指针_超干货详解:kotlin(4) java转kotlin潜规则
- 【原】web服务器占有量统计等 web网站
- 【Flink】Could not connect to BlobServer at address
- yolov5-detect.py解析与重写
- 框架学习笔记:Unity3D的MVC框架——StrangeIoC
- mysql5.0驱动_mysql5.0驱动包
- 关于安装和使用IAR的出现的一些错误
- Mac Navicat12.0.22 安装手册和操作说明
- Mac电脑如何录制视频?三种录制流视频的方法带给大家
- 独家丨Web3风向从NFTs吹向DAOs?一季度DAO发展回顾
- 华为薪资等级结构表_2019年华为新员工薪酬 华为薪酬等级工资表
- 嵌入式linux开发,libpcap移植
热门文章
- 视频平台完善“青少年模式”,应先“从无到有”再“从有到优”
- Springboot整合Swagger实战(一)
- xilinx 网站资源导读
- 动态建表格(来自https://www.cnblogs.com/mr-wuxiansheng/p/6363570.html)
- openCV手势识别之隔空移物
- Netty-Server-Hander自定义解码器-服务端主动推送
- 信息审计服务器功能,服务器审计日志
- 迭代公式求平方根c语言程序设计,迭代法求平方根C语言实验报告
- 《因果学习周刊》第4期:因果发现方法
- unity2017 Post processing