当前位置: 首页 > news >正文

C++:哈希表——模拟散列表

模拟散列表

维护一个集合,支持如下几种操作:
1.“I x”,插入一个数x
2.“Q x”,询问数x是否在集合中出现过
现在要进行N次操作,对于每个询问操作输出对应的结果

输入格式

第一行包含整数N,表示操作数量
接下来N行,每行包含一个操作指令,操作指令为"I x","Q x"中的一种

输出格式

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

数据范围

1 ≤ N ≤ 1 0 5 1\le N\le 10^5 1N105
− 1 0 9 ≤ x ≤ 1 0 9 -10^9\le x\le 10^9 109x109

输入样例

5
I 1
I 2
Q 2
Q 5

输出样例

Yes
No

问题分析

哈希表 { 存储结构 { 开放寻址法 拉链法 字符串哈希方式 哈希表\left\{ \begin{aligned} 存储结构 \left\{ \begin{aligned} 开放寻址法\\ 拉链法 \end{aligned} \right. \\ \\ 字符串哈希方式 \end{aligned} \right. 哈希表 存储结构{开放寻址法拉链法字符串哈希方式

AC代码

法一:拉链法

#include<iostream>
#include<cstring>
using namespace std;const int N = 1e5 + 3;int h[N], e[N], ne[N], idx;void insert(int x) {// keep the remainder positive int k = (x % N + N) % N;e[idx] = x;ne[idx] = h[k];h[k] = idx++;
}bool 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;
}int main() {int n;scanf("%d", &n);memset(h, -1, sizeof(h));while(n--) {char op[2];int x;scanf("%s%d", op, &x);if(op[0] == 'I') insert(x);else {if(find(x)) puts("Yes");else puts("No");}}return 0;
}

法二:开放寻址法(推荐

#include<iostream>
#include<cstring>
using namespace std;const int N = 2e5 + 3, null = 0x3f3f3f3f;int h[N];int find(int x) {int k = (x % N + N) % N;while(h[k] != null && h[k] != x) {k++;if(k == N) k = 0; }return k;
}int main() {int n;scanf("%d", &n);memset(h, 0x3f, sizeof(h));while(n--) {char op[2];int x;scanf("%s%d", op, &x);int k = find(x);if(op[0] == 'I') h[k] = x;else {if(h[k] != null) puts("Yes");else puts("No");}}return 0;
}
http://www.lryc.cn/news/128486.html

相关文章:

  • 项目配置中心介绍
  • 14-案例:购物车
  • 上海市青少年算法2023年2月月赛(丙组)
  • jetpack5.0.2 已经安装了 cudnn 和 tensorrt
  • 我的编程语言学习笔记
  • 一个DW的计算
  • java.net.BindException Address already in use: NET_Bind解决
  • JMM内存模型之happens-before阐述
  • 大数据课程I2——Kafka的架构
  • vscode如何汉化
  • matlab保存图片
  • 产业园区数字孪生3d可视化全景展示方案
  • centos7 jupyter notebook 安装自动补全插件
  • 【算法——双指针】LeetCode 202 快乐数
  • AndroidManifest清单文件中,Activity的screenOrientation属性详解
  • Qt+Pyhton实现麒麟V10系统下word文档读写功能
  • TCP/IP 下的计算机网络江湖
  • 智能家居(4)---火灾报警线程封装
  • C#语音播报问题之 无法嵌入互操作类型SpVoiceClass,请改用适用的窗口
  • C语言实例_获取文件MD5值
  • Win11环境下 Unity个人版无法激活
  • C++:模拟实现list及迭代器类模板优化方法
  • k8s整合istio配置gateway入口、配置集群内部服务调用管理
  • 工程监测振弦采集仪采集到的数据如何进行分析和处理
  • (三)行为模式:2、命令模式(Command Pattern)(C++示例)
  • 微信小程序 蓝牙设备连接,控制开关灯
  • Python 矢量数据库和矢量索引:构建 LLM 应用程序
  • -Webkit-Box 在 Safari 中出现的兼容性问题
  • 后端项目打包上传服务器记录
  • ubuntu部署haproxy