840. 模拟哈希表(模板)
维护一个集合,支持如下几种操作:
- “I x”,插入一个数x;
- “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
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. 模拟哈希表(模板)相关推荐
- LeetBook哈希表专题题解(详解/一题多解)
哈希表 文章目录 哈希表 设计哈希表 设计哈希集合(set) (超大数组法) (拉链法1(list实现)) (拉链法2(模拟实现单链表+虚拟头节点)) (拉链法3(模拟单链表不叫虚拟头节点)) 设计哈 ...
- 数据结构学习笔记(七):哈希表(Hash Table)
目录 1 哈希表的含义与结构特点 1.1 哈希(Hash)即无序 1.2 从数组看哈希表的结构特点 2 哈希函数(Hash Function)与哈希冲突(Hash Collision) 2.1 哈希函 ...
- ~~一般哈希(数据结构)(附模板题AcWing 840 模拟散列表)
(1) 拉链法 int h[N], e[N], ne[N], idx;// 向哈希表中插入一个数 void insert(int x) {int k = (x % N + N) % N;e[idx] ...
- CSP认证201509-3 模板生成系统[C++题解]:字符串处理、模拟、哈希表、引号里面有空格的字符串怎么读入
题目分析 来源:acwing 分析: 本题采用vector< string > 来读入原来模板.接下来的m行需要用到哈希表,进行模板和具体内容的映射. 遍历vector,如果找到{{,就对 ...
- C++--哈希表--散列--冲突--哈希闭散列模拟实现--问答--1107
1.哈希 概念 可以不经过任何比较,直接从表中得到要搜索的元素. 关键在于通过某种散列函数,使元素的存储位置与它的关键码之间能够建立 一一映射的关系.这样就可以通过o(1)的时间复杂度来寻找到元素. ...
- 【算法】 哈希表 自己模拟hashMap
文章目录 1.概述 2.Hash表 3. 模拟 1.概述 视频地址:https://www.bilibili.com/video/BV1E4411H73v?p=86 哈希表(散列)-Google.上机 ...
- Map和Set,简单模拟实现哈希表以及哈希表部分底层源码的分析
目录 Map和Set的简单介绍 降低哈希冲突发生的概率以及当冲突发生时如何解决哈希冲突 简单模拟实现哈希表--1.key为整形:2.key为引用类型 哈希表部分底层源码的分析 1.Map和Set的简单 ...
- C++ 使用哈希表封装模拟实现unordered_map unordered_set
一.unordered_map unordered_set 和 map set的区别 1. map set底层采取的红黑树的结构,unordered_xxx 底层数据结构是哈希表.unordered_ ...
- 哈希表(模拟散列表 字符串哈希)
目录 一.哈希表的概念 二.模拟散列表 题目 代码实现 ①拉链法 ②开放寻址法 三.字符串哈希 题目 思路 注意点 代码实现 一.哈希表的概念 哈希表(又称为散列表),将一个比较大的值域映射到一个小的 ...
最新文章
- Docker之 默认桥接网络与自定义桥接网卡
- 手脱FSG 2.0 - bart/xt
- 『 申请地址 』阿里云网盘限时开放内测申请!
- 【详解】某企业的培训关系模式 R(培训科目,培训师,学生,成绩,时间,教室), R的函数依赖集 F={培训科目→→培训师,(学生,培训科目)→成绩,(时间,教室)→培训科目,(时间,培训师)→
- 基于RStudio 实现数据可视化之二
- 关于如何修改CSDN中的字体大小和颜色
- CSDN-markdown
- Origin常见使用问题集锦
- 结构梁配筋最牛插件_??Webpack 插件开发如此简单!
- java生成假数据工具类-基于Faker1.0.2
- 智能头盔 Livall携全球首款智能骑行头盔亮相CES
- 基于高光谱成像的苹果虫害检测特征向量的选取
- 《LDAP》LDAP自定义objectclass和属性
- 人生的换档时刻?你是怎么度过的
- 02:一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)
- Java-数据库编程技术(MySQL)
- 全局变量的优缺点及为什么要少用全局变量
- REW声学测试(三):生成测试信号
- (C语言)抓老鼠啊~亏了还是赚了?--pta
- Linaro Ubuntu for Arndale Octa Broad Exynos 5420开发板,启动系统sd卡的制作。