【考研思维题】【哈希表 || 什么时候用哈希表呢?快速查询的时候】【我们一起60天准备考研算法面试(大全)-第九天 9/60】

news2024/12/26 12:20:05

专注 效率 记忆
预习 笔记 复习 做题

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)
 
文章字体风格:
红色文字表示:重难点★✔
蓝色文字表示:思路以及想法★✔
 
如果大家觉得有帮助的话,感谢大家帮忙
点赞!收藏!转发!

本博客带大家一起学习,我们不图快,只求稳扎稳打。
由于我高三是在家自学的,经验教训告诉我,学习一定要长期积累,并且复习,所以我推出此系列。
只求每天坚持40分钟,一周学5天,复习2天
也就是一周学10道题
60天后我们就可以学完81道题,相信60天后,我们一定可以有扎实的代码基础!我们每天就40分钟,和我一起坚持下去吧!
qq群:878080619

第九天【考研408-数据结构(笔试)】

  • 十、哈希表
    • 1. 模拟散列表
        • 开散列方法(拉链法)
        • 开放寻址法代码
            • 本质:(最多存1e5个数)
    • 2. 未出现过的最小正整数( 2018年全国硕士研究生招生考试 )

十、哈希表

1. 模拟散列表

在这里插入图片描述

开散列方法(拉链法)

就记住有N个链表头节点

对于原数据可以 (x % N + N) % N;找到合适位置插入到头节点

#include <cstring>
#include <iostream>

using namespace std;

const int N = 1e5 + 3;  // 取大于1e5的第一个质数,取质数冲突的概率最小 可以百度

//* 开一个槽 h
int h[N], e[N], ne[N], idx;  //邻接表

void insert(int x) {
    // c++中如果是负数 那他取模也是负的 所以 加N 再 %N 就一定是一个正数
    int k = (x % N + N) % N;
    e[idx] = x;
    ne[idx] = h[k];
    h[k] = idx++;
}

bool find(int x) {
    //用上面同样的 Hash函数 讲x映射到 从 0-1e5 之间的数
    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 n;

int main() {
    cin >> n;

    memset(h, -1, sizeof h);  //将槽先清空 空指针一般用 -1 来表示

    while (n--) {
        string op;
        int x;
        cin >> op >> x;
        if (op == "I") {
            insert(x);
        } else {
            if (find(x)) {
                puts("Yes");
            } else {
                puts("No");
            }
        }
    }
    return 0;
}

开放寻址法代码

本质:(最多存1e5个数)
#include <cstring>
#include <iostream>

using namespace std;

//开放寻址法一般开 数据范围的 2~3倍, 这样大概率就没有冲突了
const int N = 2e5 + 3;        //大于数据范围的第一个质数
const int null = 0x3f3f3f3f;  //规定空指针为 null 0x3f3f3f3f

int h[N];

int find(int x) {
    int t = (x % N + N) % N;
    while (h[t] != null && h[t] != x) {
        t++;
        if (t == N) {
            t = 0;
        }
    }
    return t;  //如果这个位置是空的, 则返回的是他应该存储的位置
}

int n;

int main() {
    cin >> n;

    memset(h, 0x3f, sizeof h);  //规定空指针为 0x3f3f3f3f

    while (n--) {
        string op;
        int x;
        cin >> op >> x;
        if (op == "I") {
            h[find(x)] = x;
        } else {
            if (h[find(x)] == null) {
                puts("No");
            } else {
                puts("Yes");
            }
        }
    }
    return 0;
}

2. 未出现过的最小正整数( 2018年全国硕士研究生招生考试 )

在这里插入图片描述
由于我们需要从1去找 是否出现在数组中

如果1去遍历一遍数组
2遍历一遍数组
太麻烦

如何一步到位?
其实可以用
哈希思想

把数组出现的数都映射存储到数组中

如何都没有出现

那么一定是大于数组的个数+1的那个值

class Solution {
public:
    int findMissMin(vector<int>& nums) {
        int n = nums.size();
        vector<bool> hash(n + 1);
        for (int x: nums)
            if (x >= 1 && x <= n)
                hash[x] = true;
        for (int i = 1; i <= n; i ++ )
            if (!hash[i])
                return i;
        return n + 1;
    }
};

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

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

相关文章

【webrtc】ProcessThreadAttached

RegisterModule 调用所在的线程指针传递给ProcessThreadAttached ProcessThreadAttached 调用不是在worker thread 而是在 registers/deregister 这个module或者 start stop 这个module的时候 ** ** pacedsender是一个moudle -实现了

【Zabbix 监控设置】

目录 一、添加 zbx-agent01 客户端主机1、服务端和客户端都配置时间同步2、服务端和客户端都设置 hosts 解析3、设置 zabbix 的下载源&#xff0c;安装 zabbix-agent24、修改 agent2 配置文件5、启动 zabbix-agent26、在服务端验证 zabbix-agent2 的连通性1、常用的键值 7、在 …

Nginx 技术

Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器&#xff0c;同时也提供了 IMAP/POP3/SMTP 服务。Nginx 是由伊戈尔赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;公开版本1.19.6发布于2020年12月15日。 其将源代码以类 BSD 许可证的形式发布&…

论文阅读 | UniFormer

UniFormer: Unified Multi-view Fusion Transformer for Spatial-Temporal Representation in Bird’s-Eye-View 文章目录 UniFormer: Unified Multi-view Fusion Transformer for Spatial-Temporal Representation in Bird’s-Eye-View摘要介绍Question: 说了半天这个时空融合…

开放式耳机漏音严重吗?开放式耳机哪个品牌好?

开放式耳机因其不入耳、不伤耳设计&#xff0c;深受大家喜欢&#xff0c;开放式耳机不会对耳朵产生任何物理伤害&#xff0c;也不会影响听觉神经&#xff0c;所以不会出现传统入耳式耳机音质损伤的问题。相信还有部分用户不知道什么是开放式耳机&#xff1f;开放式漏音严重吗&a…

剑指Offer-29-顺时针打印矩阵

剑指Offer-29题 题目描述&#xff1a;顺时针打印矩阵 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。 **题解思路&#xff1a;**使用 模拟 的方法 定义四个边界变量表示当前要遍历的边界&#xff1a;上(top)、下(bottom)、左(left)、右(right)&am…

爬取新闻评论数据并进行情绪识别

一、为什么要爬取新闻评论数据并进行情绪识别&#xff1f; 爬取新闻评论数据并进行情绪识别的目的是为了从网页中抓取用户对新闻事件或话题的评价内容&#xff0c;并从中识别和提取用户的情绪或态度&#xff0c;如积极、消极、中立等。爬取新闻评论数据并进行情绪识别有以下几个…

mysql查看引擎、默认引擎、表引擎

文章目录 1、查看mysql 数据库引擎2、查看mysql当前默认的存储引擎3、查看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):扩展知识&#xff1a;最常使用的2种存储引擎: 1、查看mysql 数据库引擎 命令&#xff1a; SHOW ENGINES 2、查看mysql当…

CPU高速缓存cache分类与查看

cat /sys/devices/system/cpu/cpu0/cache/index0/size #查看L1数据缓存大小 2~4 个时钟周期 cat /sys/devices/system/cpu/cpu0/cache/index1/size #查看L1指令缓存大小 2~4 个时钟周期 cat /sys/devices/system/cpu/cpu0/cache/index2/size #查看 CPU 里的 L2 Cache 的容量大…

PROFINET转ETHERNET/IP网关西门子通讯协议profinet

大家好&#xff0c;今天我们来聊一款令人兴奋的产品——远创智控YC-PN-EIP&#xff01;它是一款自主研发的 PROFINET 从站功能的通讯网关&#xff0c;可以将 PROFINET网络和ETHERNET/IP 网络连接起来&#xff0c;实现数据传输和交换。但这只是它的基础功能&#xff0c;它还有哪…

定时器中断

背景&#xff1a;使用动态数码管读取光电传感器的值并且显示&#xff0c;因此要使用到定时器&#xff0c;每隔一个阶段进行一次检测并进行中断。 51单片机里的关于中断的寄存器如下&#xff1a; IE – 中断允许控制寄存器 IP – 中断优先级控制寄存器 TMOD – 定时器工作方式寄…

操作系统12:I/O系统的功能、模型、接口及 I/O 设备和设备控制器

目录 1、I/O系统的功能、模型和接口 &#xff08;1&#xff09;I/O系统的基本功能 1.1 - 隐藏物理设备的细节 1.2 - 与设备的无关性 1.3 - 提高处理机和I/O设备的利用率 1.4 - 对 I/O 设备进行控制 1.5 - 确保对设备的正确共享 1.6 - 错误处理 &#xff08;2&#xff…

浅谈用于配电室的内部环境监控系统设计

摘要&#xff1a;配电室是配电系统的重要组成部分&#xff0c;影响着电力用户的用电需求&#xff0c;需要保障其安全、可靠运行。针对配电室内部环境进行了深入分析&#xff0c;设计了一种内部环境监控系统。通过该系统可以采集配电室内部的温度、湿度、液位、SF6气体和烟雾&am…

Unity游戏开发智能巡逻兵

完整资料进入【数字空间】查看——baidu搜索"writebug" 1.1 游戏设计要求&#xff1a; 创建一个地图和若干巡逻兵(使用动画)&#xff1b; 每个巡逻兵走一个3~5个边的凸多边型&#xff0c;位置数据是相对地址。即每次确定下一个目标位置&#xff0c;用自己当前位置…

STM32单片机不同型号之间的HAL库代码移植浅谈(代码解析)

在嵌入式系统开发中&#xff0c;STM32HAL库是一种常用的软件开发工具&#xff0c;用于开发STM32系列微控制器的应用程序。由于不同型号的芯片具有不同的硬件架构和外设&#xff0c;因此在将代码移植到不同类型的芯片上时&#xff0c;需要进行一些适配和调整。 首先&#xff0c;…

wps中excel如何实现模糊搜索匹配的内容(可以匹配想要的各种格式)

1&#xff0c;在某一列进行搜索-筛选搜索-如包含“XXX信息XX公司XX”这种格式的。 输入 &#xff1a;信息*公司 &#xff08;1&#xff09;选择第一种搜索方式代表寻找符合条件&#xff1a; 包含信息和公司两个关键字&#xff0c; 且信息在前公司在后&#xff0c; 且两个词语之…

SIP 抓包后获取媒体内容备忘(解析RTP)

SIP呼叫并抓包 从网上找免费的sip 软中端&#xff0c; 两个转中端建立呼叫且抓包 详情可以参考 https://blog.csdn.net/liuxingrui4p/article/details/96709136?spm1001.2014.3001.5502 使用wireshark检查SIP flow&#xff1a; 点击Telephony > SIP Flows 打开页面如下…

下一代边缘计算技术在哪里?

扫描文末二维码&#xff0c;立刻免费报名 云网一体&#xff0c;超大规模流量下 边缘云的架构与技术揭秘 伴随超高清视频时代的开启&#xff0c;热点赛事、晚会直播等特殊场景的巨大流量对业务的带宽储备、节点资源、流量调度和安全保障能力提出了新的挑战。 火山引擎边缘云基于…

JUC之十一:CompletableFuture用法详解

JUC之十一&#xff1a;CompletableFuture用法详解 文章目录 JUC之十一&#xff1a;CompletableFuture用法详解一、前言二、CompletableFuture类简介三、功能分类3.1、获取结果3.2、依赖关系3.3、and聚合关系3.4、or聚合关系3.5、并行执行3.6、结果处理 四、方法详解4.1、结果转…