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大的数相关推荐

  1. C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

    )输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...

  2. 信息学奥赛一本通(1235:输出前k大的数)——堆排序

    1235:输出前k大的数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 12715     通过数: 4043 [题目描述] 给定一个数组,统计前k大的数并且把这 ...

  3. 输出前k大的数(信息学奥赛一本通-T1235)

    [题目描述] 给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小.n < 100000. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...

  4. (分治)7617:输出前k大的数

    描述  给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入  第一行包含一个整数n,表示数组的大小.n < 100000.  第二行包含n个整数,表示数组的元素,整数之间以一个空格分 ...

  5. [Hash应用问题] 例3.2 给出n个整数,按从大到小的顺序输出前m大的数

    题目描述: 给出n个整数,请按从大到小的顺序输出前m大的数. 输入: 每组测试数据又两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500 ...

  6. yt练手1004输出前m大的数hash

    Home Page DIY Contests Problems Ranklist Status Statistics 前m大的数 Time Limit : 2000/1000ms (Java/Othe ...

  7. n个数中输出前m大的数

    描述 n个数,要求输出其中的m个最大数 想法1 开辟辅助数组,用插入排序,将前m最大数插入到辅助数组中,时间复杂度O(n*m) 想法2 类似快速排序的想法,将前m大的数都聚到最左边,再进行一次排序输出 ...

  8. 第k大的数python代码_【Python】【输出前m大的数】

    问题: 给定一个数组包含n个元素,统计前m个大的数,并把这m大的数从大到小排列给出 输入 第一行为一个整数,表述要输出的前m个数 第二行为n个整数,给出需要排序的数组 输出 从大到小的m大的数 例子 ...

  9. [leetcode]堆排序 求前k大的数

    前一篇博客中写到了排序算法,其中包含一个堆排序,因此本篇博客讲解堆这个数据结构及其应用. 关于最大堆最小堆以及初始建堆和整理堆在上篇博客中有提及,此处不再赘述.下面讲解一个堆的重要应用,求n个数中前k ...

最新文章

  1. Kubernetes v1.0特性解析
  2. isk麦克风安装教程_得胜麦克风怎么样?isk的麦克风怎么样?屁颠虫麦克风使用教程?得胜PC电容麦克风详细拆解...
  3. 复旦的新衣再登Nature!穿在身上能为手机充电,可水洗可弯折,刀戳车撵都不坏...
  4. android studio 设置自动编译_某小型公司持续集成工具jenkins实践(JAVA WEB、Android、IOS、html)...
  5. Github上Pandas,Numpy和 Scipy三个库中20个最常用的函数
  6. SAP CRM 产品主数据搜索alternative ID type下拉菜单的渲染逻辑
  7. 服务去获取配置中心配置
  8. svg mysql_SVG 实例
  9. java:数字转string 报空指针_超干货详解:kotlin(4) java转kotlin潜规则
  10. 【原】web服务器占有量统计等 web网站
  11. 【Flink】Could not connect to BlobServer at address
  12. yolov5-detect.py解析与重写
  13. 框架学习笔记:Unity3D的MVC框架——StrangeIoC
  14. mysql5.0驱动_mysql5.0驱动包
  15. 关于安装和使用IAR的出现的一些错误
  16. Mac Navicat12.0.22 安装手册和操作说明
  17. Mac电脑如何录制视频?三种录制流视频的方法带给大家
  18. 独家丨Web3风向从NFTs吹向DAOs?一季度DAO发展回顾
  19. 华为薪资等级结构表_2019年华为新员工薪酬 华为薪酬等级工资表
  20. 嵌入式linux开发,libpcap移植

热门文章

  1. 视频平台完善“青少年模式”,应先“从无到有”再“从有到优”
  2. Springboot整合Swagger实战(一)
  3. xilinx 网站资源导读
  4. 动态建表格(来自https://www.cnblogs.com/mr-wuxiansheng/p/6363570.html)
  5. openCV手势识别之隔空移物
  6. Netty-Server-Hander自定义解码器-服务端主动推送
  7. 信息审计服务器功能,服务器审计日志
  8. 迭代公式求平方根c语言程序设计,迭代法求平方根C语言实验报告
  9. 《因果学习周刊》第4期:因果发现方法
  10. unity2017 Post processing