散列 Hash

问题描述:
给出N个整数,在输入M个整数,判断M个数中是否在N中出现过.
举个例子:N = {8, 3,7,2 6}, M = 3 , { 7 , 4, 2}
思路1:遍历N个整数,和M个整数,判断是否相等.时间复杂度为O(MN)
思路2:时间换空间,定义一个bool型的hashTabel,在输入N个整数的时候,hashTabel[x] = true;
时间复杂度为O(M+N)

#include <iostream>
using namespace std;
const int maxn = 100000;
bool hastTable[maxn] = {false};
int main() {
    int n, m, x;
    cin>>n>>m;
    for (int i = 0; i < n; i++) {
        cin>>x;
        hastTable[x] = true;
    }
    for (int i = 0; i < m; i++) {
        cin>>x;
        if (hastTable[x] == true) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

查询M个整数出现的次数

#include <iostream>
using namespace std;
const int maxn = 100000;
int hastTable[maxn] = {0};
int main() {
    int n, m, x;
    cin>>n>>m;
    for (int i = 0; i < n; i++) {
        cin>>x;
        hastTable[x]++;
    }
    for (int i = 0; i < m; i++) {
        cin>>x;
        cout<<hastTable[x]<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/u014281392/article/details/80816588
今日推荐