算法笔记(七)——哈希表

embedded/2024/12/22 21:31:12/

文章目录

  • 两数之和
  • 判定是否互为字符重排
  • 存在重复元素
  • 存在重复元素 II
  • 字母异位词分组

哈希表:一种存储数据的容器;
可以快速查找某个元素,时间复杂度O(1)
频繁查找某一个数时,我们可以使用哈希

  1. 创建一个容器(unordered_map)
  2. 数组模拟一个简易哈希

容器

数据结构unordered_mapmapunorded_setset
实现机理hashRBThashRBT
元素格式key+valuekey+valuekeykey
存储规律无序键升序无序键升序
元素重复键不可,值可键不可,值可不可重复不可重复

两数之和

题目:两数之和

在这里插入图片描述
思路

  • 暴力枚举,初始两个指针 i,j,遍历所有二元组,判断nums[i] + nums[j] == target,时间复杂度:O(N^2)
  • 暴力枚举时间复杂度较高的原因是寻找 target - x 的时间复杂度过高,使用哈希表我们可以将查找的时间复杂度降为O(1),对于每一个 x,我们首先查询哈希表中是否存在target - x

我们可以将元素放入到哈希表中的同时,检查表中是否已经存在当前元素所对应的目标元素,这样就可以避免将元素全部放入到哈希表之后再来二次遍历

C++代码

class Solution 
{
public:vector<int> twoSum(vector<int>& numbers, int target) {unordered_map<int, int> hash; // 【数,下标】for(int i = 0; i < numbers.size(); i++){if(hash.find(target - numbers[i]) != hash.end())return {i, hash[target - numbers[i]]};hash[ numbers[i] ] = i;}return {};}
};

判定是否互为字符重排

题目:判定是否互为字符重排

在这里插入图片描述
思路

  • 如果两长度不相等,直接返回fasle
  • 创建一个hash表,对于s1我们添加到hash表中,对于s2中的每个字符如果hash中存在,那么我们删除一个,最后单独遍历一遍hash表,如果其值不等于零也就意味值s1或s2中元素数量不匹配,也就不发重排。

C++代码

class Solution 
{
public:bool CheckPermutation(string s1, string s2) {if(s1.size() != s2.size()) return false;unordered_map<char, int> hash;for(auto ch : s1) hash[ch]++;for(auto ch : s2) hash[ch]--;for(auto x : hash) if(x.second != 0)return false;return true;}};

存在重复元素

题目:存在重复元素

在这里插入图片描述
思路

  • 创建一个hash表,插入元素;
  • 遍历hash表,如果某个元素个数不等于1,返回true;遍历完后如果没有返回,则返回false

C++代码

class Solution 
{
public:bool containsDuplicate(vector<int>& nums) {unordered_map<int, int> hash;for(auto x : nums)hash[x]++;for(auto x : hash)if(x.second != 1) return true;return false;}
};

存在重复元素 II

题目:存在重复元素 II

在这里插入图片描述
思路

  • 和两数之和一样,只需在遇到相同元素时相减判断;

C++代码

class Solution 
{
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {// 【数,下标】unordered_map<int, int> hash;int n = nums.size();for(int i = 0; i < n; i++){// 如果当前元素已经在 hash 中存在if(hash.count(nums[i])){// 判断下标是否满足要求if(i - hash[nums[i]] <= k)return true;}hash[nums[i]] = i;}return false; // 遍历完数组没有发现符合条件的重复元素,返回 false}
};

字母异位词分组

题目: 字母异位词分组

在这里插入图片描述
思路

  • 判断两个字符串是否为字母异位词(排序)
  • unordered_map<string, vector<string>> hash;

C++代码

class Solution 
{
public:vector<vector<string>> groupAnagrams(vector<string>& strs){unordered_map<string, vector<string>> hash;for(auto& s : strs){string tmp = s;sort(tmp.begin(), tmp.end());hash[tmp].push_bacck(s);}vector<vector<string>> ret;for(auto& [k, v] : hash){ret.push_bacck(y);} return ret;}
};

http://www.ppmy.cn/embedded/123382.html

相关文章

65 注意力分数_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录回顾拓展到高维度总结掩蔽softmax操作加性注意力缩放点积注意力小结练习 回顾 上一节使用了高斯核来对查询和键之间的关系建模。上一节中的高斯核指数部分可以视为注意力评分函数&#xff08;attention scoring function&#xff09;&#…

零样本VS小样本

建立客户端 from openai import OpenAI client OpenAI(base_url"https://api.chatanywhere.tech/v1" )2.零样本 response client.chat.completions.create(model"gpt-3.5-turbo",messages[{"role": "user","content": &…

docker环境下配置cerbot获取免费ssl证书并自动续期

文章目录 实践场景了解certbot查看nginx的映射情况操作目标配置nginx配置的ssl证书设置自动续签 实践场景 本人使用docker部署了一个nginx容器&#xff0c;通过容器卷&#xff0c;实现本地html&#xff0c;ssl&#xff0c;conf和ngiinx容器映射的&#xff0c; 经常需要手动部署…

王道考研视频——操作系统笔记第二章:进程管理

操作系统第二章&#xff01;进程管理【有笔记&#xff0c;截图&#xff0c;还有王道课本的概念】&#xff01;&#xff01;&#xff01; 王道考研视频——操作系统笔记&#xff0c;第二部分&#xff0c;进程管理 0.0 课程白嫖指南_哔哩哔哩_bilibili0.0 课程白嫖指南是王道计算…

Linux:无法为立即文档创建临时文件: 设备上没有空间

虚拟机磁盘空间不足解决记录 1、问题描述2、问题解决 1、问题描述 在命令行输入命令按Tab键时出现如下报错&#xff1a; 很明显&#xff0c;设备上没有空间&#xff0c;即磁盘空间不足。通过命令查看具体情况如下&#xff1a; df -h2、问题解决 首先想到的是虚拟机扩容。关机虚…

07_矩形圆形绘制

import cv2 import numpy as np newImageInfo (600,600,3) dst np.zeros(newImageInfo,np.uint8) # 1 2 左上角 3 右下角 4 5 fill -1 >0 line w cv2.rectangle(dst,(150,380),(350,550),(150,200,100),3) # 2 center 3 r cv2.circle(dst,(250,250),(100),(0,0,255),6) …

【Docker】Docker 容器的使用指南:如何进入容器并运行命令

目录 1. 什么是 Docker 容器&#xff1f;2. 进入 Docker 容器的方法2.1 使用 docker exec2.2 使用 docker attach2.3 使用 docker run 3. 常见选项与参数4. 退出容器5. 进入容器的实际操作步骤步骤 1&#xff1a;查看正在运行的容器步骤 2&#xff1a;进入容器步骤 3&#xff1…

考拉悠然亮相天府人工智能大会,共绘AI赋能产业升级新蓝图

9月28日&#xff0c;备受瞩目的天府人工智能大会在成都拉开帷幕。本次大会是电子科技大学联合重要学术团体、政府相关部门、知名高校、科研机构和企事业单位等共同打造的人工智能领域顶尖峰会。 考拉悠然作为电子科技大学在产学研创新应用领域的杰出企业代表&#xff0c;荣幸受…