zoukankan      html  css  js  c++  java
  • 手写哈希(实现简单的加数、查询)

    题目:

    有很多货物,有n个操作(0<= n <= 1e6)

    加数操作:将输入的编号为x的货物标记

    查询操作:查询输入的编号为x的货物是否被标记

    思路:

    这个题目还是比较简单的,但是想尝试一下哈希算法,手写哈希最重要的还是要处理好冲突问题。

    代码:

    #include <bits/stdc++.h>
    #define inf 0x3f3f3f3f
    #define FRE() freopen("in.txt", "r", stdin)
    #define FRO() freopen("out.txt", "w", stdout)
    
    using namespace std;
    typedef long long ll;
    const int maxn = 1e6+10;
    const int MOD = 1e6+7;
    int mp[maxn];
    
    void addNum(int x)
    {
        int t = x;
        x = x%MOD;
        while(true)
        {
            if(!mp[x])
            {
                mp[x] = t;
                return;
            }
            if(mp[x] != t)//处理冲突
                x = (x+1)%maxn;
            else return;
        }
    }
    
    bool query(int x)
    {
        int t = x;
        x = x%MOD;
        while(true)
        {
            if(!mp[x]) return false;
            if(mp[x]!=t)
                x = (x+1)%maxn;
            else return true;
        }
    }
    
    int main()
    {
        int n;
        scanf("%d",&n);
        while(n--)
        {
            int o,x,idx;
            scanf("%d%d",&o,&x);
            if(o==0)
            {
                addNum(x+1);
            }
            else
            {
                if(query(x+1)) printf("yes
    ");
                else printf("no
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    深入理解DB2缓冲池(BufferPool)
    收银台采坑总结
    webpack4的总结
    无心法师-讲解
    cache 缓存的处理
    用es6方式的写的订阅发布的模式
    Skeleton Screen -- 骨架屏--应用
    promise实现原理
    业务线移动端适配方案总结
    vdom,diff,key 算法的了解
  • 原文地址:https://www.cnblogs.com/sykline/p/10959254.html
Copyright © 2011-2022 走看看