【上机笔试之七】Hash应用(2)-从大到小顺序输出其中前m大的数

    xiaoxiao2021-03-25  111

    题目要求:给定n个整数,按从大到小的顺序输出其中前m大的数。对于这类题目,一般人的第一想法都是,按排序,再取前m个数。但这时需要考虑题目所给定的时间限制和内存限制。最高效的方法还是使用hash,以数为数据的下标,就可以统计每个分数的数量,下标从小到大排列,如果不为0则输出,直到输出完毕。代码如下:

    #include <iostream> #include <stdlib.h> using namespace std; #define offset 500000 void main() { int n,m; long int hash[100001] = {0}; while (scanf("%d", &n) != EOF) { scanf("%d", &m); for (int i = 0; i < n; i++) { int score; scanf("%d", &score); hash[score + offset]++; //以分数为数据的下标,就可以统计每个分数的数量 } for (long int j = 50000; j > -50000; j--) { if (hash[j + offset] != 0) { // 这里的n个数各不相同,要不然需要修改 printf("%d", j); m--; if (m == 0) { printf("\n"); break; } else { printf(" "); } } } } }

    上机笔试系类教程: 【上级笔试之一】数据输入 【上机笔试之二】冒泡排序 【上机笔试之三】快速排序 【上机笔试之四】快速排序(2) 【上机笔试之五】计算两个日期的差值 【上机笔试之六】Hash应用 【上机笔试之七】Hash应用(2)-从大到小顺序输出其中前m大的数 【上机笔试之八】二分法查找 【上机笔试之九】贪心算法-换零钱 【上机笔试之十】栈应用-扣号匹配

    转载请注明原文地址: https://ju.6miu.com/read-13460.html

    最新回复(0)