zoukankan      html  css  js  c++  java
  • [Codevs 1230]元素查找(手写哈希表)

    题目连接:http://codevs.cn/problem/1230/

    说白了就是要我们自己手写一个哈希表的数据结构来实现加入和查找功能。map也能直接过(我第一次写就是用map骗AC的)


    提一下个人理解的哈希表的实现(以下说的是线性寻址法)。假设有误还请各位大神不吝不吝赐教

    用一个数组模拟哈希表,函数f(x)=数字x在哈希表中出现的下标的最小可能值。一般f(x)=x mod t,t就是哈希表的长度

    以下就是一个哈希表的演示样例,假设遍历哈希表时指针走出了哈希表的终点。就进入起点又一次遍历

    对于每次向哈希表中加入一个数x,从下标f(x)開始查找,以上文所说的遍历方式查找,直到找到装有x这个数的哈希表元素。返回查找成功(哈希表中有x这个数)。假设遍历过程中遇到了空的哈希表的一个元素就返回查找失败(哈希表中没有x这个数)。

    插入元素的过程类似于查找。向哈希表中插入数字x时,首先从下标f(x)開始查找,直到找到第一个为0的哈希表元素,将数字x插入进去。

    以下是此题代码:

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    
    #define MAXN 1000008
    #define MOD 1000007
    
    using namespace std;
    
    int hashTable[MAXN];
    
    void update(int x) //将数字x增加哈希表
    {
        int num=x;
        x%=MOD;
        while(1)
        {
            if(!hashTable[x])
            {
                hashTable[x]=num;
                return;
            }
            if(hashTable[x]!=num)
            {
                x++;
                if(x==MAXN) x=0;
            }
            else return;
        }
    }
    
    bool query(int x) //查找哈希表中是否有数字x
    {
        bool found=false;
        int num=x;
        x%=MOD;
        while(1)
        {
            if(!hashTable[x]) return false;
            if(hashTable[x]!=num)
            {
                x++;
                if(x==MAXN) x=0;
            }
            else return true;
        }
    }
    
    int main()
    {
        int n,m,x;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            update(x+1);
        }
        for(int i=1;i<=m;i++)
        {
            scanf("%d",&x);
            if(query(x+1)) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }

    
  • 相关阅读:
    程序员转型架构师,推荐你读这几本书
    Dubbo服务发现源码解析
    高可用架构之限流降级
    为什么Kafka速度那么快
    从分布式一致性到共识机制(三)拜占庭问题
    从分布式一致性到共识机制(二)Raft算法
    三分钟看完京东区块链白皮书
    轻松理解零知识证明
    三大去中心化交易协议对比
    从分布式一致性到共识机制(一)Paxos算法
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6830012.html
Copyright © 2011-2022 走看看