模拟散列表(哈希表拉链法)

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

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

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

输入格式

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

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

输出格式

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

每个结果占一行。

数据范围

1≤N≤10^5
−10^9≤x≤10^9

输入样例:
5
I 1
I 2
I 3
Q 2
Q 5
输出样例:
Yes
No

思路:要把范围这么大的X存到集合中,直接放进数组不合适,所以就要把大范围映射到小范围------>哈希表

哈希表

本题使用拉链法,也就是哈希表一个位置上有一条链表,用来存取模后映射到小范围上相等的数字(避免冲突),实现两个功能,插入和查找

其中取模要用到这个公式 ,保证结果是正数(哈希表范围从0到N)

 int k=(x%N+N)%N; 

拉链法需要注明的点:

哈希表上每个点对应一条链表,用来存取模后映射到小范围上相等的数字(避免冲突),h[]表示哈希表,h[k]表示哈希表中第k个位置上的值,h[k]存的是它这个位置上对应的链表的头结点下标

看图比较好理解:

插入部分:
void insert(int x)
{
    //h[k]是链表k的第一个元素在e数组中的索引
    
    int k=(x%N+N)%N;   //把它映射为0-N的一个正数
    e[idx]=x;  //赋值
    ne[idx]=h[k]; //当前节点的下一个位置是原来的头结点(下标)
    h[k]=idx; //现在头节点是当前节点(这里是下标)
    idx++; //自增,之后会继续操作
}

 查找部分:
bool find(int x)
{
    int k=(x%N+N)%N; 
    for(int i=h[k];i!=-1;i=ne[i])  //从头结点开始,到-1(没有节点了),i向后遍历
    {
        if(e[i]==x)  //如果在这个哈希表上的某条链表里找到了值
            return true;
    }
    return false;
}

 

puts()函数用来向标准输出设备屏幕输出字符串并换行

示例代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int  N=1e5+10;

int h[N],e[N],ne[N],idx; //h[N]是表,e和ne表示拉链这个链表中的值和下一个点下标

/*h[]是一个整数数组,用于表示哈希表。
h[k]表示哈希表中第k个槽位的值。
当h[k]的值为-1时,表示第k个槽位为空,即对应的链表为空。
当h[k]的值不为-1时,表示第k个槽位存储了链表的头结点下标。它指向链表中第一个元素的位置。
*/

void insert(int x)
{
    //h[k]是链表k的第一个元素在e数组中的索引
    
    int k=(x%N+N)%N;   //把它映射为0-N的一个正数
    e[idx]=x;  //赋值
    ne[idx]=h[k]; //当前节点的下一个位置是原来的头结点(下标)
    h[k]=idx; //现在头节点是当前节点(这里是下标)
    idx++; //自增,之后会继续操作
}
bool find(int x)
{
    int k=(x%N+N)%N; 
    for(int i=h[k];i!=-1;i=ne[i])  //从头结点开始,到-1(没有节点了),i向后遍历
    {
        if(e[i]==x)  //如果在这个哈希表上的某条链表里找到了值
            return true;
    }
    return false;
}
int main()
{
    int n;
    scanf("%d",&n);
    memset(h,-1,sizeof(h));  //初始化哈希表,把每个位上都赋为-1,表示当前位上对应的链表里面没有有效节点
    
    while(n--)
    {
        char op[2];
        int x;
        scanf("%s%d",op,&x);
        if(*op=='I') insert(x); //指针指向数组的首元素
        else
        {
            if(find(x)) puts("Yes"); //输出字符串并换行
            else puts("No");
        }
        
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/145627.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

举报“将我的电脑控作己用者”!

既然“麻辣800727”都说是“街子电信”干的&#xff0c;那么&#xff0c;我现在就正式举报&#xff1a;请依法管理宽带网&#xff0c;你国营的也不可以随意侵犯用户的人权&#xff0c;更不可以将自己变成法外之地&#xff01; 请公开答复&#xff0c;并改正&#xff0c;否则把…

机器学习线性代数知识补充

线性代数知识补充 正交矩阵与正交变换方阵特征值与特征向量相似矩阵对角化二次型正定二次型 正交矩阵与正交变换 方阵特征值与特征向量 相似矩阵 对角化 二次型 正定二次型

H5游戏源码分享-超级染色体小游戏

H5游戏源码分享-超级染色体小游戏 游戏玩法 不断地扩大发展同颜色的色块 用最少的步数完成游戏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,user-scalableno,init…

应届裁员,天胡开局——谈谈我的前端一年经历

应届裁员&#xff0c;天胡开局——谈谈我的前端一年经历 许久没有更新了&#xff0c;最近一个月都在忙&#xff0c;没错&#xff0c;正如题目所说&#xff0c;裁员然后找工作… 这周刚重新上班&#xff0c;工作第二天&#xff0c;感慨良多&#xff0c;记录些什么吧。 去年十…

学习samba

文章目录 一、samba介绍二、samba的主要进程三、配置文件四、例子 一、samba介绍 1、SMB&#xff08;Server Message Block&#xff09;协议实现文件共享&#xff0c;也称为CIFS&#xff08;Common Internet File System&#xff09;。 2、是Windows和类Unix系统之间共享文件的…

【Linux】gitee仓库的注册使用以及在Linux上远程把代码上传到gitee上的方法

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;今天为大家介绍一个在实际工作以及项目开发过程中非常实用的网站gitee&#xff0c;并教如何正确的使用这个网站以及常见问题的解决方案&#xf…

java基础-数据类型

1、变量 变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 因此&#xff0c;通过定义不同类型的变量&#xff0c;可以在内…

MySQL主主复制

主1 192.168.66.15 主2 192.168.66.16 主1&#xff1a; roottest2 ~]# hostname master1 [roottest2 ~]# bash [rootmaster1 ~]# vim /etc/my.cnf server-id11 log-binmysql-bin auto_increment_increment2 auto_increment_offset1 replicate-do-dbdemo_db …

appium+python自动化测试

获取APP的包名 1、aapt即Android Asset Packaging Tool&#xff0c;在SDK的build-tools目录下。该工具可以查看apk包名和launcherActivity 2、在android-sdk里面双击SDK-manager,下载buidl-tools 3、勾选build-tools&#xff0c;随便选一个版本&#xff0c;我这里选的是24的版…

ESP32/ESP8266基于Arduino框架下驱动1.8“tft_oled屏幕仿数码管时钟

ESP32/ESP8266基于Arduino框架下驱动1.8"tft_oled屏幕仿数码管时钟 &#x1f4cd;相关篇《ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示》&#x1f4fa;效果演示&#xff1a; &#x1f33f;屏幕显示部分&#xff0c;采用使用TFT_eSPI库驱动&#xff0c;利用该库自带的…

【SQLite】的使用及指令| 编程操作(增删改查)

一、SQLite 使用和指令集 SQLite 的基本使用SQL 命令 二、常见的 SQL 数据类型 三、SQLite的命令用法 四、SQLite的编程操作 五、sqlite3_open函数 六、sqlite3_close函数 七、sqlite3_errcode函数 八、SQLite C Interface 九、sqlite3_exec函数 十、callback回调函数 十一、…

vue:如何把后端传过来的数组的其中一个对象加入新的属性

加入我们是更改数组中的第一个对象&#xff0c;在vue中可以使用$set方法将属性插入到第一个对象中作为属性。 Script部分&#xff1a; <script>export default {data() {return {boxes: [//模拟后端传过来的数组{id:1,name:张三},{id:2,name:李四},{id:3,name:王五},{i…

香港科技大学广州|智能制造学域机器人与自主系统学域博士招生宣讲会—中国科学技术大学专场

&#x1f3e0;地点&#xff1a;中国科学技术大学西区学生活动中心&#xff08;一楼&#xff09;报告厅 【宣讲会专场1】让制造更高效、更智能、更可持续—智能制造学域 &#x1f559;时间&#xff1a;2023年11月16日&#xff08;星期四&#xff09;18:00 报名链接&#xff1a…

【SpringBoot篇】使用Spring Cache高效处理缓存数据

文章目录 &#x1f339;简述Spring Cache&#x1f3f3;️‍&#x1f308;常用注解&#x1f33a;使用SpringCache&#x1f6f8;Cacheable注解⭐测试 &#x1f6f8;CacheEvict&#x1f38d;一次清理一条数据&#x1f38d;一次删除多条数据 Spring Cache是一个框架,只要简单加一个…

【Mysql】MySQL基于成本的优化

什么是成本 我们之前说 过MySQL 执行一个查询可以有不同的执行方案&#xff0c;它会选择其中成本最低&#xff0c;或者说代价最低的那种方案去真正的执行查询。那么成本是怎么计算的呢&#xff0c;其实在 MySQL 中一条查询语句的执行成本是由下边这两个方面组成的: I/O 成本 …

数据结构:反射

基本概念 反射中的四个类 Class类 Java文件在被编译之后&#xff0c;生成了.class文件&#xff0c;JVM此时解读.class文件&#xff0c;将其解析为java.lang.Class 对象&#xff0c;在程序运行时每个java文件就最终变成了Class类对象的一个实例。通过反射机制应用这个 实例就…

如何在Qemu上跑Milk-duo开发板

前言 &#xff08;1&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 &#xff08;2&#xff09;学习本文之前&#xff0c;要求先看一下Milk-V Duo快速上手的环境搭建部分&#xff0c;创建好镜像文件。 正文 编译milk-duo qemu &#xff08;1&#xff09;下面步…

No203.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

YOLOv8全网独家优化:IoU系列篇 | Inner-IoU融合MPDIoU,创新十足,2023年11月最新IoU改进

🚀🚀🚀本文改进: Inner-IoU(基于辅助边框的IoU损失)结合MPDIoU进行创新,创新十足,全网首发 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.Inner-IoU介绍 论文:https://arxiv.org/abs/2311.02…

Python---集合中的交集 、并集 | 与差集 - 特性

用 & 来求两个集合的交集&#xff1a;-----键盘上的7上的符号&#xff0c;shift 7 同时按 用 | 来求两个集合的并集&#xff1a; -----键盘上的7上的符号&#xff0c;shift 同时按&#xff08;就是enter键上面那个|\ &#xff09; 用 - 来求两个集合的差集&#xff…