072day(输出前k大的数的尝试)
来源:互联网 发布:英国 实力 知乎 编辑:程序博客网 时间:2024/05/16 12:46
172210704111-陈国佳总结《2017年12月22日》【连续072天】
标题:输出前k大的数的尝试;
内容:
描述
给定一个数组,统计前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
(具体思路见063day)
#include<iostream>#include<cmath>using namespace std;int swap(int &a,int &b){int tmp=a;a=b;b=tmp;}void arrangeRight(int a[],int s,int e,int k){if(s>=e)return; int t=a[s],i=s,j=e;while(i!=j){if(i<j&&a[j]>=t)j--;swap(a[i],a[j]);if(i<j&&a[i]<=t)++i;swap(a[i],a[j]);}if(k==e-i+1)return;else if(k<e-i+1)arrangeRight(a,i,e,k);else arrangeRight(a,s,i-1,k-e+i-1);}void QuickSort(int a[],int s,int e){if(s>=e)return;int k=a[s];int i=s,j=e;while(i!=j){if(i<j&&a[j]<=k)j--;swap(a[i],a[j]);if(i<j&&a[i]>=k)++i;swap(a[i],a[j]);}QuickSort(a,s,i);QuickSort(a,i+1,e);}int main(){int n,k;cin>>n;int a[n];for(int i=0;i<n;++i) cin>>a[i];cin>>k;int size=sizeof(a)/sizeof(int);arrangeRight(a,0,size-1,k);QuickSort(a,size-1-k,size-1);for(int i=size-k;i<=size-1;i++) cout<<a[i]<<endl;return 0;}
还需要进一步优化,争取明天解决这道题;
明日计划:学习;
阅读全文
0 0
- 072day(输出前k大的数的尝试)
- 073day(输出前K大的数的解决)
- 输出前K大的数
- 输出前k大的数
- 输出前k大的数
- 输出前k大的数
- 查找前k大的数
- 寻找前k大的数
- 寻找前k大的数
- 查找前K大的数
- |NOIOJ|二分快排|7617:输出前k大的数
- 输出前m大的数
- 输出前m大的数
- 快速排序问题(输出前m大的数)
- 066day(求排列的逆序数的尝试)
- 求n个数中第k大的数、前K大的数、快速排序
- 求取第K大的数或者前K大的数
- 求一个数组中前K大的数或者第K大的数
- Visual Studio 2013 C++配置 Halcon 10
- General Algorithm
- 使用Spring实现Mysql的读写分离
- JavaScript中的DOM简介及应用
- 贝叶斯思维——chapter5(胜率和加数)
- 072day(输出前k大的数的尝试)
- JDBC-java与数据库的连接
- 在学习泛型中遇到的多态的一个小问题
- springMVC笔记系列(5)——@RequestMapping请求value的通配符详解
- 表单提交中get和post方式的区别
- 如何在tomcat里为多个应用配置不同的访问端口
- java反射机制判断对象所有属性是否全部为空
- http常见状态码以及其代表的含义
- 操作系统学习指南(一)