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

文章目录

  • 两数之和
  • 判定是否互为字符重排
  • 存在重复元素
  • 存在重复元素 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.mzph.cn/bicheng/55563.shtml

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

相关文章

SpringBoot使用EasyPoi根据模板导出word or pdf

1、导出效果 1.1 wrod 1.2 pdf 2、依赖 <!--word--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.3.0</version></dependency><dependency><groupId>cn.…

ESP32 Bluedroid 篇(1)—— ibeacon 广播

前言 前面我们已经了解了 ESP32 的 BLE 整体架构&#xff0c;现在我们开始实际学习一下Bluedroid 从机篇的广播和扫描。本文将会以 ble_ibeacon demo 为例子进行讲解&#xff0c;需要注意的一点是。ibeacon 分为两个部分&#xff0c;一个是作为广播者&#xff0c;一个是作为观…

[SQL] SQL语句注意事项

语法: SQL可以单行或者多行书写&#xff0c;以分号结尾SQL可以使用空格/缩进来增强语句的可读性不区分大小写&#xff0c;但是关键字建议使用大写&#xff0c;这也是一个良好的习惯。注释&#xff1a;单行注释: -- 或者 # &#xff0c;#是MySQL特有的&#xff0c;建议统一使用…

Unity中Socket_TCP异步连接,加入断线检测以及重连功能

1、服务端 using System; using System.Collections.Generic; using System.Text; #region 命名空间 using System.Net; using System.Net.Sockets; using System.Threading; using UnityEngine; #endregionnamespace AsynServerConsole {/// <summary>/// Tcp协议异步通…

项目-坦克大战学习-爆炸特效消除

对于爆炸特效的消除有个非常简单的想法&#xff0c;给爆炸类设置一个bool检测是否爆炸完成&#xff0c;初始为false在爆炸特效4图片索引处检测&#xff0c;如果索引为4&#xff08;所有图片播放完成&#xff09;那么将bool改为true public bool isboomfalse; if(index4) { …

C++(string类的实现)

1. 迭代器、返回capacity、返回size、判空、c_str、重载[]和clear的实现 string类的迭代器的功能就类似于一个指针&#xff0c;所以我们可以直接使用一个指针来实现迭代器&#xff0c;但如下图可见迭代器有两个&#xff0c;一个是指向的内容可以被修改&#xff0c;另一个则是指…

Swagger配置且添加小锁(asp.net)(笔记)

此博客是基于 asp.net core web api(.net core3.1)框架进行操作的。 一、安装Swagger包 在 NuGet程序包管理中安装下面的两个包&#xff1a; swagger包&#xff1a;Swashbuckle.AspNetCore swagger包过滤器&#xff1a;Swashbuckle.AspNetCore.Filters 二、swagger注册 在…

php与python建站的区别有哪些

php与Python建站的区别&#xff1a; 1、语言层面Python的特性比php好&#xff0c;更加规范。 2、Python的性能比php高。 3、有只需要启动服务的时候执行一次的代码&#xff0c;在php里每个请求都会被执行一次&#xff0c;Python不需要。虽然php可以通过缓存缩短这方面的差距…

Java题集(从入门到精通)04

此系列文章收录大量Java经典代码题&#xff08;也可以算是leetcode刷题指南&#xff09;&#xff0c;希望可以与大家一起努力学好Java。3、2、1&#xff0c;请看&#xff01; 目录 一、北京地铁计价程序 二、人名币兑换 三、各位数字之和 一、北京地铁计价程序 【问题描述…

【接口测试】任务1:登录接口

需要技能竞赛软件测试资料的同学们可s聊我&#xff0c;详细了解 任务实现要求 根据系统管理员—登录—接口API文档&#xff0c;编写接口测试用例&#xff0c;分别使用PostMan及JMeter进行接口测试&#xff0c;需要检查系统接口是否能正常工作&#xff0c;返回值是否正确&#…

RCE+[伪协议综合]

<aside> &#x1f4a1; 伪协议种类 </aside> **1 file:// — 访问本地文件系统 2 http:// — 访问 HTTP(s) 网址 3 ftp:// — 访问 FTP(s) URLs 4 php:// — 访问各个输入/输出流&#xff08;I/O streams&#xff09; 5 zlib:// — 压缩流 6 data:// — 数据&am…

使用CSS实现酷炫加载

使用CSS实现酷炫加载 效果展示 整体页面布局 <div class"container"></div>使用JavaScript添加loading加载动画的元素 document.addEventListener("DOMContentLoaded", () > {let container document.querySelector(".container&q…

初始爬虫11

1.斗鱼selenium爬取 # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By import timeclass Douyu(object):def __init__(self):self.url https://www.douyu.com/directory/allself.driver webdriver.Chrome()self.driver…

超分辨率重构论文集合

《Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images》 发表信息&#xff1a;发表于《IEEE TRANSACTIONS ON GEOSCIENCE AND REMOTE SENSING》2024 年&#xff0c;作者 Gensheng Hu 等&#xff0c;来自安徽大学等。核心内容 背景&#xff1a;茶叶枯萎…

Scala 字符串

Scala 字符串 Scala 是一种多范式的编程语言&#xff0c;它结合了面向对象和函数式编程的特点。在 Scala 中&#xff0c;字符串是不可变的&#xff0c;这意味着一旦创建了一个字符串&#xff0c;就不能更改它。Scala 字符串由 Java 字符串支持&#xff0c;因此 Scala 字符串的…

在线css像素px到Em的转换器

具体请前往&#xff1a;在线Px转Em工具--将绝对像素(px)长度单位转换为相对长度em

热补丁反调试API Hook—上跳/下跳

以 IsDebuggerPresent 函数为例&#xff0c;可以看到可以上跳&#xff08;简单&#xff09;&#xff0c;也可以下跳&#xff08;复杂&#xff09;。 上跳&#xff1a; BYTE NewCodes[2] { 0xEB,0xF9 }; BYTE JmpCode[5] { 0xE9,0 }; BYTE oldCodes[2] { 0 };BOOL Mydebug() …

第三十八章 验证和解密入站消息 - 实例身份验证和 WS-Security

文章目录 第三十八章 验证和解密入站消息 - 实例身份验证和 WS-Security实例身份验证和 WS-Security检索安全标头元素FindByEncryptedKeySHA1()FindElement()FindLastElement() 检查签名确认 第三十八章 验证和解密入站消息 - 实例身份验证和 WS-Security 实例身份验证和 WS-S…

拿下奇怪的前端报错:某些多摄手机拉取部分摄像头视频流会导致应用崩溃,该如何改善呢?

现在有些手机更新的很激进&#xff0c;但是却没有很好的实现web规范&#xff0c;不支持facingMode配置来控制前后摄像头&#xff0c;只能根据序号切换&#xff0c;但拉取到某些设备的流会导致应用崩溃&#xff0c;这里就教一招如何尽可能的改善用户体验 至少不至于次次都崩溃&a…