代码随想录Day6 | 哈希表理论基础 242.有效的字母异位词349. 两个数组的交集 202. 快乐数1. 两数之和

docker拉取镜像报错:Error response from daemon: Get “https://registry-1.docker.io/v2/“: dial tcp 阅读详情

代码随想录Day6 | 哈希表理论基础 242.有效的字母异位词349. 两个数组的交集 202. 快乐数1. 两数之和

哈希表基础

哈希表是根据关键码的值而直接进行访问的数据结构
其作用:判断一个元素是否出现在集合里

哈希函数和哈希碰撞

将一段数据映射到哈希表上的处理方法,但对于一个数组来说,其长度是有限的,如果数据元素个数大于其长度,会产生不同数据出现在统一索引位置这就是哈希碰撞。
哈希碰撞的解决方法:拉链法和线性检测法

  1. 拉链法:将冲突的元素存储在链表中,链表的起点就是被冲突的索引地址
  2. 线性探测法:哈希表的容量大于数据个数,利用冲突位置的下一个空位置来存放冲突元素。

三种哈希结构

  1. 数组
    对于映射长度可控的可以使用,比如英文字母
  2. set集合
    代码随想录
    代码随想录
  3. map映射
    代码随想录
    在这里插入图片描述
  4. 使用场景
    优先使用unordered_set,利用其较好的查找删除效率,如果要求集合是有序的那么可以利用set,如果集合中需要存在重复数据那么就利用multiset

有效的字母异位词

文档讲解:代码随想录
视频讲解: 学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词
状态:×

  1. 思路
    由于对于小写字母来说,只有26个,所以可以利用数组来充当哈希表,那么如何构造哈希函数–将字母变为数字下标,利用字母的ASCII码值即可,char-‘a’。
    遍历s的时候对下标对应的值进行+1操作,在遍历t的时候对下标对应的值进行-1操作。
    最后的检测就是数组中的数据是否全为0。
class Solution {
public:
    bool isAnagram(string s, string t) {
        vector<int> check(26,0);
        for(int i = 0;i<s.length();i++)
        {
            check[s[i]-'a']++;
        }
        for(int i = 0;i<t.length();i++)
        {
            check[t[i]-'a']--;
        }
        for(int i = 0;i<26;i++)
        {
            if(check[i] != 0)
            {
                return false;
            }
        }
        return true;
    }
};

时间复杂度: O ( 3 n ) O(3n) O(3n)

两个数组的交集

文档讲解:代码随想录
视频讲解: 学透哈希表,set使用有技巧!Leetcode:349. 两个数组的交集
状态:可以用数组,不会set

  1. 数组思路
    与上一题类似,因为元素的个数最多是1001个,所以可以考虑使用数组。那么就i需要自己构建哈希函数,我们将元素值作为哈希表的索引值即可。
    但这道题还需要考虑一些情况,因为这道题是需要找出相同的数,并且不重复的输出。
    那么上一道题利用等于一个val的判断就不适用了,因为初始化哈希数组,会将所有元素变为这个val。第二点是不重复,如果我们在第一数组进行映射的时候还是将索引对应的值++,那么最后判断的时候会出现重复,或者避免了重复会出现结果为空,比如nums2中只有1个值,而nums1中有多个。
    所以做法是,每次映射值的时候将索引对应的值变为1,然后找到值进行–操作,这样当哈希数组中的值变为0的时候,那说明存在相交,且这个值只会被加入一次,因为之后再存在就是负数了。
    对于避免加入本来就不存在数的情况,将返回数组的更新放在检查第二个数组的循环里面进行。
    具体代码如下
class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector<int> res;
        vector<int> check(1001);

        for(int i = 0;i<nums1.size();i++)
        {
            check[nums1[i]] = 1;
        }
        for(int i = 0;i<nums2.size();i++)
        {
            check[nums2[i]]--;
            if(check[nums2[i]] == 0)
            {
                res.push_back(nums2[i]);
            }
        }
        return res;
    }
};
  1. 哈希表思路
    对于不重复且不排序就考虑使用unordered_set<>
//定义哈希表
unordered_set<TYPE> Name;
//定义同时赋值
unordered_set<TYPE> Name(list1.begin(),list1.end());
//查找元素是否出现
Name.find(num) != Name.end() //当num对应的位置不是最后一个说明存在
//插入元素
Name.insert(num);

本题的具体代码

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> res;//用于去重
        unordered_set<int> check(nums1.begin(),nums1.end());//用于存储检测

        for(int num:nums2)
        {
            if(check.find(num) != check.end())
            {
                res.insert(num);
            }
        }

        return vector<int>(res.begin(),res.end());
    }
};

快乐数

文档讲解:代码随想录
视频讲解:
状态:×

  1. 思路
    无限循环说明会有重复的结果出现,可以考虑使用哈希表,n比较大所以使用数组不再合适,使用unordered_set当之后出现的数在set里面发现,那么就可以返回false并终止循环。
    本题代码如下
class Solution {
public:
    bool isHappy(int n) {
        //无限循环说明会有重复
        unordered_set<int> check;
        
        while(1)
        {
            //每次开始循环之前初始化平方和结果
            int final = 0;

            //计算平方和结果
            while(n)
            {
                
                final += (n%10)*(n%10);
                n = n/10;
            }
            //将平方和结果变为下一次循环的n
            n = final;
            
            //当平方和结果为1 返回true跳出循环
            if(final == 1)
            {
                return true;
                break;
            }
            
            //当平方和结果之前存在,返回false跳出循环
            if(check.find(final) != check.end())
            {
                return false;
                break;
            }
            //当平方和结果不为1,且不存在添加到set中
            else
            {
                check.insert(final);
            }
        }
    }
};

时间复杂度: O ( l o g n ∗ 1 ) O(logn * 1) O(logn∗1) logn是求平方和的时间

两数之和

文档讲解:代码随想录
视频讲解: 梦开始的地方,Leetcode:1.两数之和,学透哈希表,map使用有技巧!
状态:只会暴力

  1. 思路
    不重复出现,说明我们需要利用unordered来存放满足条件的值。
    返回下标,不是返回值,说明我们需要存放一个类似字典的数据(val,index)
    所以考虑使用map
//返回一个数组
return {a,b};

//map的一些操作
//定义
unordered_map<int,int> check;
//定义查找的变量利用auto pair<int,int>
auto i= check.find(target);
//pair<int,int>第一个数据存放的是我们的target,第二个数据存放的是我们的下标,map去find的时候,是去搜寻第一个值,所以第一个值应当为我们的target
//获取方式
i->first;
i->second;
//插入一组数据,与查询相对应
check.insert(pair<int,int>(nums[i),i);

本题代码如下

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> check;
        for(int i = 0;i<nums.size();i++)
        {
            int mubiao = target-nums[i];
            if(check.find(mubiao) != check.end())
            {
                return {i,check.find(mubiao)->second};
            }
            else
            {
                check.insert(pair<int, int>(nums[i], i));
            }
        }
        return {};
    }
};
mac搭建ios自动化环境之WebDriverAgent配置 一、WebDriverAgent 1、简单介绍: WebDriverAgent是facebook为苹果公司开发的一款自动化测试工具,github上有下载资源;另外appium安装后也会自动安装自带的WebDriverAgent;可以用自带的,也可以从github下载并替换自带的; 2、不同appium版本自带WebDriverAgent默认路径不同 1)appium 1.10.1之前版本: npm方式安装: /usr/local/lib/node_modules/appium/node_modules/a 阅读详情

相关推荐

音频质量评估指标全解析:从主观到客观的全面指南

本文全面解析了音频质量评估的核心指标,涵盖主观评价(如MOS、DMOS)与客观评价(如PESQ、STOI、SDR)。重点介绍了DNSMOS等AI驱动的无参考评估方法,并提供了根据语音通信、噪声抑制、语音分离等不同场景选择指标组合的实战指南,帮助开发者和研究者科学量化音频质量。

rum55的博客 644

【代码随想录】Day6 哈希表理论基础 242.有效的字母异位词 ,349. 两个数组的交集 202. 快乐数 1. 两数之和

新的一部分-哈希表,哈希表之前做题相对比较熟练希望能快速复习今天主要详细理解了C++中哈希表 unordered_set unordered_map的基础使用以及快乐数算法。DAY 6 Finished 撒花~

SuperMao2016的博客 1948

【中科院一区Top-源码复现】Day-ahead photovoltaic power forecastingwith multi-source temporal-featureconvoluti

【中科院一区Top-源码复现】Day-ahead photovoltaic power forecastingwith multi-source temporal-featureconvoluti

739

代码随想录Day6哈希表理论基础 242.有效的字母异位词349. 两个数组的交集202. 快乐数 1. 两数之和

当我们要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。那么再来看一下map ,在map 是一个key value 的数据结构,map中,对key是有限制,对value没有限制的,因为key的存储方式使用红黑树实现的。如果学生的数量大于哈希表的大小怎么办,此时就算哈希函数计算的再均匀,也避免不了会有几位学生的名字同时映射到哈希表 同一个索引下标的位置。

weixin_55956746的博客 2839

【LLC快速上手系列】LLC轻载时,死区时间怎么调才对?别再傻傻乱搞了!

死区时间,就是指。如果你死区设得好,就能让开通前 ( V_DS to 0 ),完美实现!

weixin_43199439的博客 1856

基于学术研究于NASA官网GPM卫星数据下载详细教程

基于学术研究于NASA官网GPM卫星数据下载详细教程

珞瑜的博客 8655

代码随想录 Day 6 | 【哈希表理论基础】、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

然后定义一个空数组,用于存放最终结果。

loveJava17的博客 1022

OpenClaw进阶实战(二十三):微信公众号接入——被动回复、客服消息、素材管理

本文介绍了将OpenClaw接入微信公众号的完整方案,重点包含以下内容: 接入方案选型:对比官方插件、三方服务和自建中转三种方式,选择自建Node.js中转服务实现灵活控制 核心原理:通过中转服务器完成微信消息协议转换,处理5秒超时限制和异步回复机制 实战开发: 搭建Express中转服务 实现Token管理和消息处理 采用内存缓存对话历史 通过客服接口异步回复 官方插件方案:介绍2026年发布的ClawBot插件,支持文本/图片/文件收发 进阶功能:包括素材管理接口调用示例 该方案适用于需要深度定制公众号

PeterPan的博客 142

代码随想录算法训练营Day6 | 哈希表理论基础 LeetCode 242. 有效的字母异位词 349.两个数组的交集 202. 快乐数 1.两数之和

哈希表,Hash table,也称散列表,是根据关键码的值而直接访问的数据结构。如,数组即为一张哈希表。哈希表,常用于:快速判断一个元素是否出现在集合里。,即将不同数据格式转化为不同数值,映射为哈希表上的索引数字。当存入内容数量大于哈希表大小时,若发生不同内容映射于哈希表同一索引下标的位置,即发生。和拉链法,将发生冲突的元素存储在同一索引的链表中;线性探测法,需要哈希表大小存入内容数量,发生冲突时,寻找哈希表中下一个空位来进行存放。:数组,set(集合),map(映射)

weixin_65053787的博客 1913

即插即用系列(代码实践) | WACV 2024 CSAM:面向各向异性医学图像分割的 2.5D 跨切片注意力模块

文章摘要: 论文《CSAM: A 2.5D Cross-Slice Attention Module for Anisotropic Volumetric Medical Image Segmentation》提出了一种解决医学图像各向异性问题的创新模块CSAM。针对MRI/CT数据中切片间分辨率差异大的挑战,该模块通过2.5D跨切片注意力机制,结合2D卷积的轻量性和3D上下文感知能力。核心包括语义注意力(通道级)、位置注意力(空间级)和跨切片注意力(支持不确定性建模),能在几乎不增加参数量的情况下有效捕捉

分享顶会顶刊论文即插即用模块 104

【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用

本文记录了使用xCoreSDK-Python驱动Rokae实体机械臂的测试流程。

机器人梦想家 Bing Lee 1501

代码随想录算法训练营Day6 | 哈希表理论基础、242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

训练营第六天:哈希表理论基础、242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

jiabao0520的博客 1645

【学习系列】SAP RAP 2:创建第一个RAP应用

本文介绍了从零开始创建基于SAP RAP(ABAP RESTful Application Programming Model)的Fiori应用的完整流程。首先说明了学习RAP需要结合官方文档和教程,并提供了相关资源链接。文章详细讲解了开发环境的准备要求,包括系统版本、开发工具和基本知识。重点演示了如何通过8个步骤创建支持CRUD操作和草稿功能的RAP应用:1)创建数据库表;2)定义CDS视图实体;3)创建投影视图;4)定义行为;5)创建行为投影;6)定义服务;7)绑定服务;8)添加UI注解。

DeveloperMrMeng的博客 1498

代码随想录Day6 哈希表理论基础、242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

哈希表理论基础、242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

weixin_46620779的博客 3436

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

代码随想录刷题day6丨哈希表理论基础 ,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数, 1. 两数之和

当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。

m0_75195038的博客 1107

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

代码随想录 Day6 哈希表 哈希表理论基础, 242.有效的字母异位词, 349. 两个数组的交集,202. 快乐数,1. 两数之和

unorder_set的底层实现是哈希表,所以说在查找元素和增删的时候效率都是非常高的。2. unorder_set 可以直接帮助去重,这个地方也用到它的底层原理,unordered_set的底层是哈希表所以说这样在查找一个元素的时候O(1)哈希法中有vector,set,map,因为我们需要保存元素值和下标值所以采用map,因为我们需要检查map中有没有存在的相应的元素值即key代表元素值。4.set的元素输入的方式是.insert(x),vector的元素输入的方式是.push_back(x)

weixin_61057535的博客 1228

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

代码随想录算法训练营day6| 哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

day5休息。

u010793461的博客 1158

代码随想录day6|哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

代码随想录day6

xccxynb的博客 1149

代码随想录算法营Day6 | 哈希表理论基础, 242.有效的字母异位词, 349. 两个数组的交集, 202. 快乐数, 1. 两数之和

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

cestyvwen的博客 783

代码随想录Day6 | 哈希表理论基础、242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

std::map也是一样的道理。std::unordered_set底层实现为哈希表,std::set 和std::multiset 的底层实现是红黑树,红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。**再遍历 字符串s的时候,当我们要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。

m0_73617263的博客 875

Studying-代码随想录训练营day6| 哈希表理论基础、242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

哈希表学习:哈希表理论基础、242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

yachihaoteng的博客 1474

# 代码随想录Day6 |哈希表理论基础|242.有效的字母异位词|349.两个数组的交集|202.快乐数|1.两数之和

初步思路:计算两个数组中每个数字出现的频率,然后两个频率哈希表相减,nums1减去nums2的哈希表,如果哈希表中的某个差值不等于num1的原频率,说明是交集,返回这个数。终于把打卡补上了,今天的任务也大致完成了,题目有一些多,每天需要花三四个小时,一定要坚持下来,不要再漏卡了,不然补起来很吃力。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。假如target=9,找到一个3,需要查看3前后的哈希表中有没有6.你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

爱因斯小柚的博客 1021

代码随想录day6 | 哈希表理论基础 leetcode242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

此外,如果 s 和 t 的长度不同,t 必然不是 s 的异位词。解题思想:map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)。快乐数的定义指出,如果对一个数重复进行“将每个数字替换为每个数字的平方和”的操作,最终结果要么是 1(这是一个快乐数),要么是进入。在随后的迭代中,如果再次遇到一个已经在 record 集合中的数,这意味着我们已经回到了之前某个步骤的数,即进入了循环。

ajbsyuinbsn的博客 775

代码随想录算法训练营Day6 | 哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和 | Python | 个人记录向

哈希表:哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和。

Python基本算法 1224

Carl代码随想录算法训练营-Day 6-哈希表理论基础、242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

本文是参加算法学习的日常记录,分析总结了哈希表基础理论的一些要点,详细阐述了四道基础的哈希表leetcode算法题目(有效字母异位词、两个数组的交集、快乐数、两数之和)的解题思路,并给出了对应的Java代码实现。

BuleFACE_Zhang的博客 1036

代码随想录算法训练营Day6|● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

我们找这个x有没有在数组里出现过不就行了吗,我的天,我觉得这个思想真的非常的巧妙,我瞬间恍然大悟,找他有没有出现过,并且还要知道他的下标,这不就是对应着map里的key和val吗,我瞬间就知道怎么写了,当然就是先定义一个map,遍历数组在遍历到当前元素的时候,定义一个x和上面的操作一样,然后判断它有没有出现过,如果出现了,就直接返回他的下标和当前元素的下标,没有就将当前的元素值和下标加入到map中,注意这里加入的不是x,来看具体代码的实现。今天学了新的东西——哈希法,这个方法真的是好用,怎么好用呢?

2401_82757749的博客 990
上一篇: 代码随想录Day4 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II
下一篇: 代码随想录Day7 | 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
sRiddle
博客等级 码龄7年 528粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值