【算法】哈希表

个人主页 : zxctscl
如有转载请先通知

题目

  • 1. 1. 两数之和
    • 1.1 分析
    • 1.2 代码
  • 2. 面试题 01.02. 判定是否互为字符重排
    • 2.1 分析
    • 2.2 代码
  • 3. 217. 存在重复元素
    • 3.1 分析
    • 3.2 代码
  • 4. 219. 存在重复元素 II
    • 4.1 分析
    • 4.2 代码
  • 5. 49. 字母异位词分组
    • 5.1 分析
    • 5.2 代码

1. 1. 两数之和

在这里插入图片描述

1.1 分析

这里题目所述非常清楚,就求两个数的和,可以直接用暴力解法:先固定一个数然后找另一个数。但这样的方式来用哈希表优化,可能就会出现某一个数被找了两次,还得再判断一下,就比较麻烦。

而另一种暴力解法就是,先固定一个数,然后找他前面的数来判断是否和等于目标值,这种暴力解法可以使用哈希表来做优化,之前固定过的数据都是考虑过得,就不会出现重复的数字。
先固定一个数然后找它前面的数,可以把它前面的数都存在哈希表里面。第一个数前面没有数,就先把这个是放在哈希表里面,然后继续移动到下一个数,继续在哈希表里面找值。但是因为要找下标,就把下标和值一起存在哈希表里面。

1.2 代码

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int>hash;for(int i=0;i<nums.size();i++){int x=target-nums[i];if(hash.count(x))return{hash[x],i};hash[nums[i]]=i;}return {-1,-1};}
};

2. 面试题 01.02. 判定是否互为字符重排

在这里插入图片描述

2.1 分析

一、题目解析
题目要求只有小写字母,只要比较两个字符串里面的每个字符个数相同就可以判断两个字符是不是互为字符重排。

二、算法原理
要保存字符和对应字符出现的值,就用到哈希表。
只有小写字母,只需要开26个大小的数组,只统计s1中每个字符出现的个数就行,来遍历s2时候在哈希表中出现对应的字符就减掉1就可以,只要哈希表里面全部为0就可以,但如果s2中出现的某一个字符,在哈希表里面被减成了负数,就直接返回false就可以。如果两个字符串的长度不相等,那么就直接返回false就可以。

2.2 代码

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

3. 217. 存在重复元素

在这里插入图片描述

3.1 分析

一、题目解析
只要题目中出现相同的数就返回true。

二、算法原理
只需要固定当前的值,然后把它前面的值放在哈希表里面,判断一下哈希表里面有没有这个数,有就返回true,没有就返回false。

3.2 代码

class Solution {
public:bool containsDuplicate(vector<int>& nums) {unordered_set<int>hash;for(auto x:nums){if(hash.count(x))return true;else hash.insert(x);}return false;}
};

4. 219. 存在重复元素 II

在这里插入图片描述

4.1 分析

一、题目解析
和上面的一题类似,这里就多了一个下标的判断,如果下标的差值小于等于某一个数就返回true,否则就返回false。

二、算法原理
固定一个值,把它前面一个值的下标和值都放在哈希表里面,当在它前面找到这个数的时候就把下标拿出来,比较差值,大于规定的值,就把这个数继续放在哈希表里面。
但是可能会出现一个情况,出现相同的元素,但是下标不一样,可能会吧哈希表里面的值覆盖掉,可题目中找的是小于等于某一个值,所以就直接找最近的值,所以是可以覆盖掉哈希表之前相同的值。

4.2 代码

class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int,int>hash;for(int i=0;i<nums.size();i++){if(hash.count(nums[i])){if(i-hash[nums[i]]<=k)return true;}hash[nums[i]]=i;}return false;}
};

5. 49. 字母异位词分组

在这里插入图片描述

5.1 分析

互为字⺟异位词的单词有⼀个特点:将它们排序之后,两个单词应该是完全相同的。
所以,我们可以利⽤这个特性,将单词按照字典序排序,如果排序后的单词相同的话,就划分到同一组中。
这时我们就要处理两个问题:

  1. 排序后的单词与原单词需要能互相映射;
  2. 将排序后相同的单词,划分到同一组;

定义一个哈希表:将排序后的字符串string当做哈希表的 key 值;将字母异位词数组string[]当成 val 值。

5.2 代码

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

有问题请指出,大家一起进步!!!

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

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

相关文章

Gateway的简单介绍和使用

1、Gateway简介&#xff1a; Gateway 是一种 API 网关&#xff08;API Gateway&#xff09;技术&#xff0c;它作为微服务架构中的关键组件&#xff0c;负责为系统的外部请求与内部服务之间提供统一的接入点。Spring Cloud Gateway 是基于 Spring 生态系统实现的一个高性能、易…

2024.4.11

1.思维导图 2.指针形式验证大小端存储 #include<myhead.h>int main(int argc, const char *argv[]) {int num 0x12345678;char* ptr (char *)&num;if(*ptr 0x12){printf("big endian\n");}else if(*ptr 0x78){printf("little endian\n");}r…

MINI2440 开发板 给他干出来了

环境是ubuntu14.04。不要问我为什么是这个版本&#xff0c;因为之前的ubuntu12.04 环境干不出来&#xff0c;你去试试就知道了&#xff01;各种资源包下载不下来。 输入启动参数&#xff1a; 进入MINI2440&#xff1a;别说心里一万个开心&#xff0c;启动完成&#xff0c;输入p…

【电子通识】热风枪的结构与使用方法

热风枪的结构 热风枪是专门用来拆焊、焊接贴片元器件和贴片集成电路的焊接工具&#xff0c;它主要由主机和热风焊枪两大部分构成。 热风枪主要有电源开关、风速设置、温度设置、热风连接等部件组成。根据不同品牌和价位的热风枪&#xff0c;有一些功能齐全的也集成了烙铁功能。…

负荷预测 | Matlab基于TCN-LSTM-Attention单输入单输出时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.负荷预测 | Matlab基于TCN-LSTM-Attention单输入单输出时间序列多步预测&#xff1b; 2.单变量时间序列数据集&#xff0c;采用前12个时刻预测未来96个时刻的数据&#xff1b; 3.excel数据方便替换&#xff0c;运行…

【鸿蒙开发】系统组件Column

Column组件 Column沿垂直方向布局的容器。 接口&#xff1a; Column(value?: {space?: string | number}) 参数&#xff1a; 参数名 参数类型 必填 参数描述 space string | number 否 纵向布局元素垂直方向间距。 从API version 9开始&#xff0c;space为负数或者…

Mongodb入门--头歌实验MongoDB 之滴滴、摩拜都在用的索引

MongoDB 常用于大数据的存储&#xff0c;在庞大的数据中查询出我们所要的信息&#xff0c;如果使用普通查询方法&#xff0c;遍历所有文档查询&#xff0c;花费的时间太久了。 假设现在有个集合 person&#xff0c;查询命令&#xff1a;db.person.find( {age: 18} )&#xff0…

libVLC 视频窗口上叠加透明窗口

很多时候&#xff0c;我们需要在界面上画一些三角形、文字等之类的东西&#xff0c;我们之需要重写paintEvent方法&#xff0c;比如像这样 void Widget::paintEvent(QPaintEvent *event) 以下就是重写的代码。 void Widget::paintEvent(QPaintEvent *event) {//创建QPainte…

振动信号频域图绘制函数(python版)

在实际应用中&#xff0c;不免会看时域图和频域图&#xff0c;封装了绘制时域图和频域图程序&#xff0c;方便调用 ## 导入包 from matplotlib import pyplot as plt from matplotlib import rcParams import numpy as np import pandas as pdconfig {"font.family"…

创新指南|战略衡量的增长组织:用人工智能增强关键绩效指标(KPI)

传统的关键绩效指标 (KPI)越来越无法提供领导者取得成功所需的信息和见解。他们在跟踪进展、协调人员和流程、确定资源优先级以及推进问责制方面存在不足。本文是 2024 年第一份麻省理工学院 SMR - BCG 人工智能和商业战略全球高管学习和研究项目的调查结果——人工智能和业务战…

最新PDD商家端Anti-Content参数逆向分析与纯算法还原

文章目录 1. 写在前面2. 接口分析3. 断点分析4. 扣JS代码 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致…

第十五篇:Mybatis

文章目录 一、什么是MyBatis二、Mybatis入门案例三、配置SQL提示四、数据库连接池四、lombok五、mybatis基础操作5.1 根据id删除5.2 预编译SQL5.3 新增员工5.4 更新员工5.5 查询员工&#xff08;用于页面回显&#xff09;5.6 条件查询 七、XML映射文件八、动态SQL8.1 if语句8.2…

(学习日记)2024.04.12:UCOSIII第四十节:软件定时器函数接口讲解

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

JavaScript_语法--变量

1.4 变量 变量&#xff1a;一小块存储数据的内存空间 Java语言是强类型语言&#xff0c;而JavaScript是弱类型的语言 强类型&#xff1a; 在开辟变量存储空间时&#xff0c;定义了空间将来存储的数据的数据类型。只能存储固定类型的数据 弱类型&#xff1a; 在开辟变量存储空间…

VS中使用QT的UI提升类时,找不到头文件的情况

1、情况简述 在使用VS时&#xff0c;会发现与QCreator存在一些差异。最主要的就是要设置很多东西&#xff0c;如果不配置的话&#xff0c;就会遇到一些问题。下面我分享下我调试过程中遇到的一个问题。使用Qdesigner的UI提升类时&#xff0c;找不到头文件的情况&#xff1a; …

Kivy 学习2

from kivy.app import App from kivy.uix.button import Button from kivy.uix.floatlayout import FloatLayout from kivy.graphics import Rectangle, Colorclass FloatLayoutApp(App):def build(self):def update_rect(layout, *args):设置背景尺寸&#xff0c;可忽略layout…

Spring Cloud学习笔记:Eureka简介,Eureka简单样例

这是本人学习的总结&#xff0c;主要学习资料如下 - 马士兵教育 [TOC](目录)1、Eureka 1.1、架构 Eureka是SpringCloud Nexflix的核心子模块&#xff0c;其中包含Server和Client。 Server提供服务注册&#xff0c;存储所有可用服务节点。 Client用于简化和Server的通讯复杂…

【学习心得】Python中的queue模块使用

一、Queue模块的知识点思维导图 二、Queue模块常用函数介绍 queue模块是内置的&#xff0c;不需要安装直接导入就可以了。 &#xff08;1&#xff09;创建一个Queue对象 import queue# 创建一个队列实例 q queue.Queue(maxsize20) # 可选参数&#xff0c;默认为无限大&am…

物理随机接入信道PRACH数据生成

NR随机接入前导码&#xff08;Preamble&#xff09;采用Zadoff Chu序列&#xff0c;长度分别为839和139。 物理随机接入信道&#xff08;PRACH&#xff09;前导码格式的定义包括PRACH OFDM符号个数、循环前缀&#xff08;CP&#xff09;长度和保护时间&#xff08;GT&#xff…

软件库V1.2版本开源-首页UI优化

iAppV3源码&#xff0c;首页的分类更换成了标签布局&#xff0c;各位可以参考学习&#xff0c;界面名称已经中文标注&#xff01; 老版本和现在的版本还是有较大的区别的&#xff0c;建议更新一下&#xff01; 新版本改动界面如下&#xff1a; 1、首页.iyu&#xff1a;分类按…