题解:散列查找(拉链法)出现冲突时,在散列表冲突点向外延伸一条链表(单链表),怎么使用memset函数

news2024/11/22 21:10:28

一、链接

840. 模拟散列表

二、题目

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

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

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

输入格式

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

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

输出格式

对于每个询问指令 Q x,输出一个询问结果,如果 xx 在集合中出现过,则输出 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

三、题意

这是一个模板题目,执行两个操作,第一个操作是插入一个数字,第二个操作是查询一个数字是否属于这个散列表

四、代码

#include<iostream>
#include<cstring>

using namespace std;

const int N=1e5+3;

int h[N],e[N],ne[N],idx;

void insert(int x)
{
    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[5];
        int x;
        
        scanf("%s%d",op,&x);
        
        if(*op=='I')    insert(x);
        else
        {
            if(find(x)) printf("Yes\n");
            else    printf("No\n");
        }
    }
    
    return 0;
}

五、总结

1.需要寻找到一个适当的质数,在数学上可以证明可以让冲突的次数最小,这里我们就寻找一个大于1e5的最小的质数就行了,100003

2.模板主要就是两个函数

3.第一个函数是插入函数:先对大数字进行处理,然后存入散列表里面,如果发生冲突了,就把数字插入冲突点的延伸出去的单链表上面,或者说这里其实是把单链表的头节点当作了散列表,第二点开始存储冲突的点,单链表的操作可以参考这个:单链表的数组模拟,最开始对数据的处理是把一个很大的数字存在散列表里面,正常的整数采用取模就足够了,这里是会出现负数,c++取模负数取模之后是负数,但是散列表(哈希表)数组下标是非负数,所以需要将处理之后的数字控制在非负数的范围内。第一次取模之后,保证了将这个数字缩小,缩小几个数量级,然后加上N,保证数字是一个正数,再进行取模运算,就可以实现将大数据元素存在长度不是那么长的哈希表里面

4.第二个函数是查找函数:像前面3说的一样,先处理数据,找到一个应该存储的哈希表的位置,然后开始遍历单链表,找到了就返回true,找不到就返回false,很多时候我们需要熟练使用bool函数

5.刚开始我们给单链表(用数组模拟的)初始化的值为0,但是我们最开始单链表最好是所有元素都是-1,因为空指针指向-1,到达了尾结点,尾结点指向-1,使用memset函数,这个函数的头文件是cstring,将数组元素初始化,memset函数第一个使用的元素表示数组名,第二个元素表示需要使用的值,第三个元素一般是使用sizeof(h),h表示的是数组名

6.还有一些小细节,比如说使用scanf,printf进行输入输出,使用%s读入字符串,可以减少空格换行带来的输入困扰

只取第一个字符进行条件判断

if(op[0]=='I')  insert(x);

7.还是那句话,天道酬勤 

六、精美图片

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP 开发编辑界面-关闭助手

打开关闭助手时的开发界面如下&#xff1a; 关闭关闭助手后的界面如下&#xff1a; 菜单栏&#xff1a; 编辑--》修改操作--》关闭助手

VLC视频直播低时延配置

默认的VLC的播放时延是比较高的&#xff0c;一般是秒级别&#xff0c;默认配置的话&#xff0c;都是5秒左右&#xff0c;这种默认配置是为了利用缓存机制&#xff0c;使播放体验更加流畅&#xff0c;对于需要更低时延的播放测试的话&#xff0c;并不适合&#xff0c;需要调整一…

商城-学习整理-基础-商品服务API-属性分组(七)

目录 一、创建系统菜单二、开发属性分组1、将三级分类功能抽取出来2、编写后端代码3、属性分组新增功能4、属性分组修改回显功能 三、品牌管理1、分页显示有点问题&#xff0c;使用MyBatis-Plus有点问题&#xff0c;需要使用分页插件&#xff0c;给容器中放一个2、修改模糊查询…

Netty: 向ChannelPipeline中添加ChannelHandler的顺序

Netty中的ChannelHandler有inbound handler&#xff0c;处理接收数据的过程&#xff1b;有outbound handler&#xff0c;处理发数据的过程。当然&#xff0c;也有的handler既处理接收的数据 &#xff0c;也处理发送的数据。 每个channel对应一个ChannelPipeline。handler被添加…

多语言多用户跨境电商系统搭建--独立站源码制作

开发一个多语言多用户跨境电商系统搭建需要考虑以下几个方面&#xff1a; 1. 系统架构设计&#xff1a;选择一个适合多语言多用户跨境电商系统的开源框架或者自行设计系统架构。确保系统的稳定性和扩展性。 2. 多语言支持&#xff1a;设计一个多语言支持功能&#xff0c;使用…

电子邮件数据加密的工作原理

电子邮件数据加密是通过使用密码学算法对电子邮件的内容进行转换&#xff0c;使得只有授权的接收方能够解读邮件内容。下面是电子邮件数据加密的一般工作原理&#xff1a; 密钥生成&#xff1a;发送方和接收方分别生成自己的密钥对。密钥对通常包括公钥和私钥。公钥用于加密和验…

phonopy中频率单位的换算

phonopy给出的单位是THz&#xff0c;有时会向cm-1和eV单位进行转换。在phonopy中进行单位转换时&#xff0c; 主要是对在phonopy中使用的参数factor进行修改&#xff0c;我们平时声子谱导出使用命令是&#xff1a; phonopy band.conf &#xff08;导出的是默认单位THz&…

Redisson 3.23.1 正式发布,官方推荐的 Redis 客户端

导读Redisson 3.23.1 现已发布&#xff0c;这是一个 Java 编写的 Redis 客户端&#xff0c;具备驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;功能&#xff0c;并获得了 Redis 的官方推荐。 此版本更新内容如下&#xff1a; Improvement 减少了 RLiveObjectSer…

别再被问倒了!Mysql索引竟然在这些情况下失灵?

嗨&#xff0c;亲爱的读者们&#xff01;小米又来啦~ 今天我们要聊一个在数据库面试中常常被问到的热门话题&#xff1a;Mysql索引失效。想要在面试中脱颖而出&#xff0c;掌握这个知识点可是必不可少哦&#xff01;废话不多说&#xff0c;咱们现在就深入剖析一下&#xff0c;看…

SQL Server 查询数据并汇总相关技巧 23.08.08

GROUPING 是一个聚合函数,它产生一个附加的列&#xff0c;当用 CUBE 或 ROLLUP 运算符添加行时&#xff0c;附加的列输出值为1&#xff0c;当所添加的行不是由 CUBE 或 ROLLUP 产生时&#xff0c;附加列值为0。 仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择…

【模拟 + 离线】CF1719 C

Problem - C - Codeforces 题意&#xff1a; 思路&#xff1a; 手摸以下样例容易发现 对于最大值左边的数&#xff0c;答案可以直接模拟轮数得到 对于最大值&#xff0c;答案直接就是pos 对于最大值右边的数&#xff0c;答案就是0 接下来就是如何模拟轮数的问题了 一开始…

直流浪涌保护器与交流浪涌保护器的区别和作用

在现代社会&#xff0c;电力作为生产、生活的重要能源&#xff0c;其稳定供应显得尤为重要。然而&#xff0c;电力系统常常受到电压浪涌的干扰&#xff0c;这种突发的电压冲击可能给设备带来损害。为了应对这一问题&#xff0c;直流浪涌保护器和交流浪涌保护器应运而生&#xf…

Android车机录制视频报错,竟是编码器的锅 ?

1. 现象描述 工作中有一个项目&#xff0c;使用的是CameraView这个第三方相机库来调用相机。 CameraView封装了Camera1和Camera2&#xff0c;内部做了很多功能的封装&#xff0c;API使用起来相对比较简单。 在App中接入后&#xff0c;手机上能够正常录制视频&#xff0c;看上去…

Deep Networks with Stochastic Depth - 动态随机网络

文章目录 基本结构ResNet的公式改造效果计算前向传播过程 实验结果CIFAR数据集结果SVHN数据集结果训练时间的比对极深网络的对比测试ImageNet的测试结果测试过程中的结果 网络结构的Hyper-parameter比对测试 前面两篇是讲经典网络ResNet的&#xff1a; ResNet1 ResNet2 这个残…

中介者模式(Mediator)

中介者模式是一种行为设计模式&#xff0c;可以减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互&#xff0c;迫使它们通过一个封装了对象间交互行为的中介者对象来进行合作&#xff0c;从而使对象间耦合松散&#xff0c;并可独立地改变它们之间的交互。中介者…

【设计模式——学习笔记】23种设计模式——中介者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入案例一普通实现中介者模式 案例二 介绍基础介绍登场角色尚硅谷 《图解设计模式》 案例实现案例一&#xff1a;智能家庭类图实现 案例二&#xff1a;登录页面逻辑实现说明类图实现 总结文章说明 案例引入 案例一 普通实现 在租房过程中&#xff0c;客户可能…

回看雷军演讲,我对项目经理人的发展又有了2点想法……

大家好&#xff0c;我是老原。 最近在回看一些大佬演讲&#xff0c;看到雷军的演讲时&#xff0c;说实话我蛮激动的&#xff0c;最近常有粉丝朋友找我闲聊&#xff0c;也工作十几年&#xff0c;不知道怎么才能寻求突破&#xff1f; 而小米本身&#xff0c;不就是一直在突破吗…

C高级-day4

#!/bin/bash function fun1(){arr[0]id -u $1arr[1]id -g $1echo ${arr[*]} }arr(fun1 ubuntu) echo ${arr[*]}冒泡排序 void Maopao(int arr[],int len){for(int i1;i<len;i){int count0;for(int j0;j<len-i;j){if(arr[j]>arr[j1]){int tarr[j];arr[j]arr[j1];arr[j…

嵌入式Linux下LVGL的移植与配置

一.sdk源码下载路径 1.官方源码下载路径如下: ​​​​​​ https://github.com/lvgl/lvgl git下载方式 git clone https://github.com/lvgl/lvgl.git 2.个人移植好的源码8.2版本下载路径: 链接:https://pan.baidu.com/s/1jyqIennsQpv-RB4RyKvZyg?pwd=c68e 提取码:c68e…

《HeadFirst设计模式(第二版)》第七章代码——外观模式

代码文件目录&#xff1a; Subsystem: Amplifier package Chapter7_AdapterAndFacadePattern.FacadePattern.Subsystem;/*** Author 竹心* Date 2023/8/8**///扬声器 public class Amplifier {int volume 0;//音量public void on(){System.out.println("The amplifier …