机试指南第二章-经典入门-Hash的应用自解

Hash的应用:

Hash即散列,不像数据结构与算法中讲的各种Hash方法和冲突处理等过多的阐述,以下主要介绍Hash在机试试题解答中的作用。

例2.5 统计同成绩学生人数

Hash解法AC代码:(一般想到的也是这种解法)

#include<cstring>
#include<iostream>
using namespace std;

int grade[105];

int main()
{
    int n, m, index;
    memset(grade, 0, sizeof(grade));
    while (cin >> n)
    {
        for (int i = 0; i < n; i++)
        {
            cin >> m;
            grade[m]++;
        }
        cin >> index;
        cout << grade[index] << endl;
    }
    return 0;
}

例2.6 Sort

时间限制:1 秒 内存限制:128 兆

题目描述:

给你n个整数,请按从大到小的顺序输出其中前m大的数。

输入:

每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n 个各不相同,且都处于区间[-500000,500000]的整数。

输出:

对每组测试数据按从大到小的顺序输出前m大的数。

样例输入:

5 3 3 -35 92 213 -644

样例输出:

213 92 3 

AC代码:

#include<cstring>
#include<iostream>

using namespace std;

int num[1000001];
const int UPSET = 500000;
const int DOWNSET = -500000;

int main()
{
    int n, m, x;
    memset(num, 0, sizeof(num));
    while (cin >> n >> m)
    {
        for (int i = 0; i < n; i++)
        {
            cin >> x;
            num[x+ UPSET]++;
        }
        for (int i = UPSET; i >= DOWNSET; i--)
        {
            if (num[i + UPSET] == 1)
            {
                cout << i;
                m--;
                if (m != 0)cout << " ";
                else
                {
                    cout << endl;
                    break;
                }
            }
        }
    }
    return 0;
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
int a[1000500];

bool cmp(int a,int b)
{
    return a > b;
}

int main()
{
    int n, m;
    while (scanf("%d%d", &n, &m) != EOF)
    {
        for (int i = 0; i < n; i++)scanf("%d", &a[i]);
        sort(a, a + n, cmp);
        for (int i = 0; i < m - 1; i++)printf("%d ", a[i]);
        printf("%d\n", a[m-1]);
    }
    //system("pause");
    return 0;
}
二刷
posted @ 2019-06-15 19:07  郭怡柔  阅读(119)  评论(0编辑  收藏  举报