C++:散列(数字)简单实现

版权声明:转载请注明出处 https://blog.csdn.net/warmeyes/article/details/86497988

  主要利用bool函数,将出现的数字通过数组下标的方式给予true;最后查询一下现有数组的,所以查询数字为下标的数组内储存的为false还是true即可,整体算法复杂度非常低O(n+m),的确是简单题的最优解法,防止大量查询时,利用二次遍历所造成的时间复杂度过高而超时~代码如下:

#include<cstdio>

const int maxn = 100010;
bool hashtable[maxn] = {false};

int main()
{
    int n, m, x;

    scanf("%d%d", &n, &m);

    for(int i = 0; i < n ; i ++ )
    {
        scanf("%d", &x);
        hashtable[x] = true;
    }

    for(int i = 0; i < n ; i++)
    {
        scanf("%d", &x);
        if(hashtable[x] == true)
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/warmeyes/article/details/86497988