• 机试指南第二章-经典入门-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
    ", a[m-1]);
        }
        //system("pause");
        return 0;
    }
    二刷
  • 相关阅读:
    Nginx的启动、停止与重启
    用Java实现链表结构对象:单向无环链表
    java匿名内部类详解
    如何统计博客园的个人博客访问量
    Java 读写Properties配置文件
    java的枚举类型Enum解释
    接口测试框架1
    python几道简单的算法题
    很全的 Python 面试题
    有有面试
  • 原文地址:https://www.cnblogs.com/yun-an/p/11028552.html
Copyright © 2020-2023  润新知