博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1425 sort 题解
阅读量:6494 次
发布时间:2019-06-24

本文共 1743 字,大约阅读时间需要 5 分钟。

选择出数列中前k个最大的数。

这里由于数据特殊。所以能够使用hash表的方法:

#include 
#include
#include
#include
using namespace std;const int SIZE = 1000005;const int SMALL = -500000;bool arr[SIZE];int main(){ int n, m, a, maxN = INT_MIN; while (~scanf("%d %d", &n, &m)) { for (int i = 0; i < n; i++) { scanf("%d", &a); arr[a - SMALL] = true; if (a - SMALL > maxN) maxN = a - SMALL; } for (int i = maxN; i >= 0 && m; i--) { if (arr[i]) { if (m > 1) printf("%d ", i + SMALL); else printf("%d\n", i + SMALL); m--; } } } return 0;}
也能够使用选择前k个数,然后排序,只是难度高非常多:

#include 
#include
#include
#include
using namespace std;int partition(int *arr, int low, int up){ for (int i = low; i < up; i++) if (arr[i] >= arr[up]) swap(arr[low++], arr[i]); swap(arr[low], arr[up]); return low;}//K作为绝对下标位置处理void randSelectK(int *arr, int low, int up, int K){ int r = low + rand() % (up - low + 1); swap(arr[r], arr[up]); int idx = partition(arr, low, up); if (idx > K) randSelectK(arr, low, idx-1, K); else if (idx < K) randSelectK(arr, idx+1, up, K);}void randQuickSort(int *arr, int low, int up){ if (low >= up) return ;//不能是low == up int r = low + rand() % (up - low + 1); swap(arr[r], arr[up]); int mid = partition(arr, low, up); randQuickSort(arr, low, mid-1); randQuickSort(arr, mid+1, up);}const int SIZE = 1000000;int arr[SIZE]; int main(){ int n, m; srand(unsigned(time(NULL))); while(~scanf("%d %d", &n, &m)) { for (int i = 0; i < n; i++) scanf("%d", &arr[i]); randSelectK(arr, 0, n-1, m-1); randQuickSort(arr, 0, m-1); for (int i = 0; i < m-1; i++) { printf("%d ", arr[i]); } printf("%d\n", arr[m-1]); } return 0;}

转载地址:http://wmkyo.baihongyu.com/

你可能感兴趣的文章
VMware 虚拟机克隆 CentOS 6.5 之后,网络配置问题的解决方案
查看>>
Python ( 1 ) ----- 简介
查看>>
[linux基础学习]run level
查看>>
第七周学习总结
查看>>
一步步的教你安装UChome (UChome 安装教程)
查看>>
[DeeplearningAI笔记]序列模型1.5-1.6不同类型的循环神经网络/语言模型与序列生成...
查看>>
P2533 [AHOI2012]信号塔
查看>>
Android电话拨号器(uri格式)与四种设置点击事件的方法
查看>>
java web中对json的使用
查看>>
TYVJ P1051 选课 Label:多叉转二叉&&树形dp(虐心♥)
查看>>
将数据库中提取出来的数据在后台进行分页处理
查看>>
bzoj1034
查看>>
百度地图 鼠标绘制,获取矩形,多边形的顶点经纬度
查看>>
回文树模板
查看>>
struts2之防止表单重复提交
查看>>
【转】Netty系列之Netty并发编程分析
查看>>
cf591d
查看>>
图片存储系统TFS
查看>>
MYSQL备份与恢复
查看>>
贪心/数学 Codeforces Round #212 (Div. 2) A. Two Semiknights Meet
查看>>