算法板子:模拟哈希表——哈希映射、哈希表中插入新值、拉链法处理冲突、查找一个数是否在哈希表中

news2025/1/9 17:19:00
  1. 由题意到x是[-1e9,1e9],我们要将x映射到[0,1e5)
  2. 这种映射过程可以使用哈希函数hash(x)将x映射到对应的坑位,并使用哈希表存储映射后的x,这里的存储我们选用拉链法将映射到同一个坑位的数串起来; 哈希表又称为散列表
  3. 比如: hash(4)=4%3=1,那么4就映射到坑位1; hash(7)=7%3=1,那么7也映射到坑位1,然后就将4和7使用单链表串在坑位1
    在这里插入图片描述
#include <iostream>
#include <cstring>
using namespace std;

const int N = 100003;
// 哈希表
int h[N], e[N], ne[N], idx;

// 哈希函数,找到x映射后对应的坑位
int hash_f(int x)
{
    return (x % N + N) % N;
}

// 哈希表中插入一个数x
void insert(int x)
{
    // 找到x的坑位
    int i = hash_f(x);
    // 在该坑位串起来的单链表的头部插入一个结点,就是插入头结点; h[i]存储头结点的编号
    e[idx] = x;
    ne[idx] = h[i];
    h[i] = idx ++ ;
}

// 查询数x是否在哈希表中
bool find(int x)
{
    // 找到该数的坑位
    int j = hash_f(x);
    // 遍历该坑位的单链表
    for (int i = h[j]; i != -1; i = ne[i]) 
        if (e[i] == x)
            return true;
    
    return false;
}

// hash(X)=x%n; find_mod函数找到取模时用到的n
// 取模用的n是哈希表的长度也是一个质数,才能尽可能的减小冲突; 所以首先根据题意确定哈希表的最小长度,然后找到大于等于长度的最小质数,再将这个找到的质数重新定义为哈希表的长度
int find_mod()
{
    // 根据题意得哈希表的最小长度是1e5,不是质数,我们就得找到大于1e5的最小质数
    int i;
    for (i = 1e5; ; i ++ )
    {
        bool flag = true;
        for (int j = 2; j * j <= i; j ++ )
        {
            if (i % j == 0)
            {
                flag = false;
                break;
            }
        }
        
        if (flag) return i;
    }
}

int main()
{
    // 找到哈希表的长度和取模时用的n
    //cout << find_mod() << endl;
    
    // 将哈希表的所有值初始化为-1; 
    // memset(void dest, int c, size_t count); 参数:目的地,要改为的东西,改几个(sizeof h代表h所占的字节数)
    memset(h, -1, sizeof h);
    
    int n;
    cin >> n;
    
    while (n -- )
    {
        char op;
        int x;
        cin >> op >> x;
        
        if (op == 'I') insert(x);
        else if (op == 'Q') cout << (find(x) ? "Yes" : "No") << endl;

    }
    
    return 0;
}

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

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

相关文章

全国产业园排名新看点:国际数字影像产业园再创新高

随着中国数字经济的快速发展&#xff0c;产业园区作为技术创新和产业聚集的核心区域&#xff0c;正不断涌现出新的活力和突破。树莓集团旗下所运营的国际数字影像产业园&#xff0c;以其卓越的运营模式和创新能力&#xff0c;成功跻身全国产业园区的前列&#xff0c;成为行业的…

Godot学习笔记7——Input单例与自定义单例

一、单例 单例是一个可以在任何脚本直接访问的对象&#xff0c;分为内置单例与自定义单例。内置单例不是节点&#xff0c;主要成员是各类Server&#xff0c;开发者可以使用它们直接控制游戏程序的图形与音效等内容。 我们可以在文档中查找“GlobalScope”获取相关内容&#x…

【Python学习手册(第四版)】学习笔记07-Python对象类型-字符串详解

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 这篇文章是对Python对象类型-字符串的详解。内容较多需花1-2h阅读。如果你是0基础的初学者建议看这篇文章&#xff0c;对比其他教程会更加容易上手。 对字符串做了…

Java语言程序设计——篇十(1)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 接口介绍 接口概述接口定义接口的实现实战演练 &#x1f445;接口的继承实战演练实战演练 接口的类型常量实战演练 静态方法默认方法解决默认方…

一投就中不是梦,录取率>80%,最快1个月就见刊,计算机沾边就收,认可度还不低

本次模术狮精心整理5本期刊&#xff0c;最快1个月就见刊&#xff0c;计算机沾边就收&#xff0c;认可度还不低&#xff01; 1 Knowledge-Based Systems ▲ 图片来源&#xff1a;Knowledge-Based Systems官网 期刊简介&#xff1a;《Knowledge-Based Systems》是人工智能领域的…

(2024,缩放定律,信息论,模型大小与数据的线性关系)神经缩放定律的信息论基础

Information-Theoretic Foundations for Neural Scaling Laws 公和众与号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 3. 缩放定律 4. 一个例子 5. 结论 0. 摘要 神经网络…

EasyExcel - table写入复杂表头及内容

需求&#xff1a;在一个工作簿中&#xff0c;需要填充固定字段信息&#xff0c;并写入多个不同的标题列的表格及内容。 常规Excel写入一般是一个工作簿一个表头。 目录 一、复杂表单分析1.表单示例2.复杂表单拆解3.准备模板 二、EasyExcel文档1.最简单的填充Excel2.使用table去…

[Linux安全运维] Nginx安装部署以及LNMP框架搭建保姆级教程

前言 LNMP&#xff1a;Linux 系统下 NginxMySQLPHP 网站服务器架构。因为四种软件均是免费开源网站&#xff0c;所有这是一个免费、高效的网站服务系统。 本章主要介绍的是Nginx相关的环境部署&#xff0c;以及LNMP框架的搭建&#xff0c;Nginx知识点介绍在文章&#xff1a;[…

昇思25天学习打卡营第23天|基于MindSpore的红酒分类实验案例:从数据准备到模型预测

目录 MindSpore 版本配置与红酒数据集下载 葡萄酒数据读取、处理与可视化分析 基于 KNN 算法的样本分类模型构建与预测函数定义 基于 KNN 模型的测试集预测与准确率计算 MindSpore 版本配置与红酒数据集下载 首先使用 %%capture captured_output 捕获后续代码的输出。然后&a…

【Django5】内置Admin系统

系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求&HttpRequest请求类 第七章 会话管理&#xff08;Cookies&Session&#xff09; 第八章 文件上传…

python中,jsonpath提取数据的时候出现TypeError: ‘bool‘ object is not subscriptable怎么解决

json格式如下&#xff1a; { success: True, result: { codeInfo: { code: 0, msg: 成功 }, uploadToken: { resId: rzJRpo, endpoint: https://sit-api-ypsx-resource.ypsx-internal.com/r…

知识分享|temu跨境选品师盈利一般要多久?

在成为一名跨境选品师&#xff0c;特别是在TEMU(The Easy Market University)平台上&#xff0c;盈利的速度取决于多种因素&#xff0c;包括个人技能、市场选择、产品定位和运营策略等。这些因素共同决定了一个选品师从初始阶段到稳定盈利的时间轨迹。 首先&#xff0c;对于新手…

vue3组件通信(一)

组件通信 一.props(父<>子)二.自定义事件&#xff08;子>父&#xff09;三.mitt(实现任意组件通信)四.v-model(父<>子)(1).v-model的本质(2).组件标签中v-model的本质(3).$event到底是什么 概况 一.props(父<>子) 使用频率最高 若 父传子&#xff1a;属性…

Redis结合Lua脚本的简单使用

我们就拿购物车举例子 现在有5个东西免费送&#xff0c;我们只能选择1个 例如 可乐 美年达 香蕉 苹果 薯片 我们选择后就放进redis里面 然后我们不能选重复&#xff0c;只能选不同 Lua脚本 我们redis使用lua脚本的时候&#xff0c;会传两个参数进去 一个是List<Strin…

(新)VMware虚拟机安装Linux教程(超详细)

创作不易&#xff0c;禁止转载抄袭&#xff01;&#xff01;&#xff01;违者必究&#xff01;&#xff01;&#xff01; 创作不易&#xff0c;禁止转载抄袭&#xff01;&#xff01;&#xff01;违者必究&#xff01;&#xff01;&#xff01; 创作不易&#xff0c;禁止转载抄…

PMP相关考点整理

PMP知识点整理 一、预测型4. 项目整合管理启动:4.1 制定项目章程规划:4.2 制定项目管理计划执行:4.3 指导与管理项目工作4.4 管理项目知识监控4.5监控项目工作4.6 实施整体变更控制【都是重点】收尾4.7 结束项目或阶段5. 项目范围管理启动:/规划:/5.1 规划范围管理5.2 收集…

36.【C语言】函数栈帧的创建和销毁

本文将解决以下问题 局部变量是怎么创建的&#xff1f; 为什么局部变量的值是随机值&#xff1f; 函数是怎么传参的&#xff1f;传参的顺序是怎样的&#xff1f; 形参和实参是什么关系&#xff1f; 函数调用是怎么做的&#xff1f; 函数调用是结束后怎么返回的&#xff1f; 本文…

电脑部分数据丢失?别担心,这里有恢复指南!

在数字化时代&#xff0c;电脑已成为我们日常生活中不可或缺的设备&#xff0c;存储着大量重要的工作文档、个人照片、视频回忆以及各类学习资料。然而&#xff0c;无论是由于误操作、系统故障、病毒攻击还是硬件损坏&#xff0c;电脑数据丢失的情况时有发生&#xff0c;令人焦…

JAVA(IO流-字节流)day 7.29

ok家人们今天继续学习IO流&#xff0c; 一.字节流 存储时&#xff0c;都是使用二进制来保存。 2.1 字节输出流OutputStream OutputStream是字节输出流的超类&#xff08;父类&#xff09;, 方法 public abstract void write(int b)&#xff1a; 一次写一个字节数据。pub…

如何实现无公网IP远程访问本地内网部署的Proxmox VE虚拟机平台

文章目录 1. 局域网访问PVE2. 安装Cpolar 工具3. 创建PVE公网地址4. 远程访问PVE5. 设置固定域名6. 固定地址访问 Proxmox VE是一个完全开源的平台&#xff0c;基于Debian Linux&#xff0c;用于运行虚拟机和容器。为了提供最大的灵活性&#xff0c;它支持两种虚拟化技术&#…