维护一个集合,支持如下几种操作:

  1. “I x”,插入一个数x;
  2. “Q x”,询问数x是否在集合中出现过;

现在要进行N次操作,对于每个询问操作输出对应的结果。

输入格式

第一行包含整数N,表示操作数量。

接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。

输出格式

对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“No”。

每个结果占一行。

数据范围

1≤N≤1051≤N≤105
−109≤x≤109−109≤x≤109

输入样例:

5
I 1
I 2
I 3
Q 2
Q 5

输出样例:

Yes
No
两种存储方法
1.拉链法
一个数x,k=x%N,

N一般取大于操作数的第一个

质数

  

   代码:

import java.util.Arrays;
import java.util.Scanner;public class Main{static final int N=100003;static int e[]=new int[N];static int ne[]=new int[N];static int h[]=new int[N];static int idx;static void insert(int x){//其实就是单链表的头插法int k=(x%N+N)%N;//x可能为负数,使它>=0e[idx]=x;ne[idx]=h[k];h[k]=idx;idx++;}static boolean find(int x){//其实就是遍历链表int k=(x%N+N)%N;for(int i=h[k];i!=-1;i=ne[i])if(e[i]==x) return true;return false;}public static void main(String[] args) {Scanner scan=new Scanner(System.in);int n=scan.nextInt();Arrays.fill(h,-1);while(n-->0){String op=scan.next();int x=scan.nextInt();if(op.equals("I")){insert(x);}else{if(find(x)) System.out.println("Yes");else System.out.println("No");}}}
}

2.开放寻址法

基本思路:k=x%N ,如果这个位置没有数就放在这个位置,否则依次寻找下一个位置

代码:

import java.util.Arrays;
import java.util.Scanner;public class Main{static final int N=200003;//一般取数据范围N的2倍 的 大于它的第一个质数static int INF=(int)1e9+5;static int h[]=new int[N];static int find(int x){int k=(x%N+N)%N;while(h[k]!=INF && h[k]!=x){//这个位置有数并且不等于xk++;//寻找下一个位置if(k==N) k=0;//找到最后一个位置,从头开始寻找
                }return k;}public static void main(String[] args) {Scanner scan=new Scanner(System.in);Arrays.fill(h,INF);//初始化为一个不在数据范围的数int n=scan.nextInt();while(n-->0){String op=scan.next();int x=scan.nextInt();int k=find(x);if(op.equals("I")){h[k]=x;}else{if(h[k]!=INF) System.out.println("Yes");else System.out.println("No");}}}
}

840. 模拟哈希表(模板)相关推荐

  1. LeetBook哈希表专题题解(详解/一题多解)

    哈希表 文章目录 哈希表 设计哈希表 设计哈希集合(set) (超大数组法) (拉链法1(list实现)) (拉链法2(模拟实现单链表+虚拟头节点)) (拉链法3(模拟单链表不叫虚拟头节点)) 设计哈 ...

  2. 数据结构学习笔记(七):哈希表(Hash Table)

    目录 1 哈希表的含义与结构特点 1.1 哈希(Hash)即无序 1.2 从数组看哈希表的结构特点 2 哈希函数(Hash Function)与哈希冲突(Hash Collision) 2.1 哈希函 ...

  3. ~~一般哈希(数据结构)(附模板题AcWing 840 模拟散列表)

    (1) 拉链法 int h[N], e[N], ne[N], idx;// 向哈希表中插入一个数 void insert(int x) {int k = (x % N + N) % N;e[idx] ...

  4. CSP认证201509-3 模板生成系统[C++题解]:字符串处理、模拟、哈希表、引号里面有空格的字符串怎么读入

    题目分析 来源:acwing 分析: 本题采用vector< string > 来读入原来模板.接下来的m行需要用到哈希表,进行模板和具体内容的映射. 遍历vector,如果找到{{,就对 ...

  5. C++--哈希表--散列--冲突--哈希闭散列模拟实现--问答--1107

    1.哈希 概念 可以不经过任何比较,直接从表中得到要搜索的元素. 关键在于通过某种散列函数,使元素的存储位置与它的关键码之间能够建立 一一映射的关系.这样就可以通过o(1)的时间复杂度来寻找到元素. ...

  6. 【算法】 哈希表 自己模拟hashMap

    文章目录 1.概述 2.Hash表 3. 模拟 1.概述 视频地址:https://www.bilibili.com/video/BV1E4411H73v?p=86 哈希表(散列)-Google.上机 ...

  7. Map和Set,简单模拟实现哈希表以及哈希表部分底层源码的分析

    目录 Map和Set的简单介绍 降低哈希冲突发生的概率以及当冲突发生时如何解决哈希冲突 简单模拟实现哈希表--1.key为整形:2.key为引用类型 哈希表部分底层源码的分析 1.Map和Set的简单 ...

  8. C++ 使用哈希表封装模拟实现unordered_map unordered_set

    一.unordered_map unordered_set 和 map set的区别 1. map set底层采取的红黑树的结构,unordered_xxx 底层数据结构是哈希表.unordered_ ...

  9. 哈希表(模拟散列表 字符串哈希)

    目录 一.哈希表的概念 二.模拟散列表 题目 代码实现 ①拉链法 ②开放寻址法 三.字符串哈希 题目 思路 注意点 代码实现 一.哈希表的概念 哈希表(又称为散列表),将一个比较大的值域映射到一个小的 ...

最新文章

  1. Docker之 默认桥接网络与自定义桥接网卡
  2. 手脱FSG 2.0 - bart/xt
  3. 『 申请地址 』阿里云网盘限时开放内测申请!
  4. 【详解】某企业的培训关系模式 R(培训科目,培训师,学生,成绩,时间,教室), R的函数依赖集 F={培训科目→→培训师,(学生,培训科目)→成绩,(时间,教室)→培训科目,(时间,培训师)→
  5. 基于RStudio 实现数据可视化之二
  6. 关于如何修改CSDN中的字体大小和颜色
  7. CSDN-markdown
  8. Origin常见使用问题集锦
  9. 结构梁配筋最牛插件_??Webpack 插件开发如此简单!
  10. java生成假数据工具类-基于Faker1.0.2
  11. 智能头盔 Livall携全球首款智能骑行头盔亮相CES
  12. 基于高光谱成像的苹果虫害检测特征向量的选取
  13. 《LDAP》LDAP自定义objectclass和属性
  14. 人生的换档时刻?你是怎么度过的
  15. 02:一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)
  16. Java-数据库编程技术(MySQL)
  17. 全局变量的优缺点及为什么要少用全局变量
  18. REW声学测试(三):生成测试信号
  19. (C语言)抓老鼠啊~亏了还是赚了?--pta
  20. Linaro Ubuntu for Arndale Octa Broad Exynos 5420开发板,启动系统sd卡的制作。

热门文章

  1. ADBannerView 的基本使用方法
  2. 斗地主AI算法——第十章の被动出牌(4)
  3. shell的read方法使用介绍
  4. 设置让终端保持utf8 cmd的设置
  5. 草稿 0255 ktv第二个页面
  6. 视图函数的基本理解 django
  7. 安装django框架:虚拟环境准备 框架安装
  8. redis-配置主从-实际操作-over
  9. python-面向对向-静态方法的继承-父类中的super方法
  10. Laravel-admin 使用表单动态地保存一个关联模型(源码探究到功能实现)