【算法专题十】哈希表

文章目录

  • 0.哈希表简介
  • 1. 两数之和
    • 1.1 题目
    • 1.2 思路
    • 1.3 代码
  • 2.判断是否为字符重排
    • 2.1 题目
    • 2.2 思路
    • 2.3 代码
  • 3. leetcode.217.存在重复元素
    • 3.1 题目
    • 3.2 思路
    • 3.3 代码
  • 4. leetcode.219.存在重复的元素Ⅱ
    • 4.1 题目
    • 4.2 思路
    • 4.3 代码
  • 5. leetcode.49.字母异位词分组
    • 5.1 题目
    • 5.2 思路
    • 5.3 代码

0.哈希表简介

在这里插入图片描述

1. 两数之和

1.1 题目

题目链接
在这里插入图片描述在这里插入图片描述

1.2 思路

在这里插入图片描述

1.3 代码

// 法1.1 
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int n = nums.size();for(int i = 0; i < n - 1; i++){for(int j = i + 1; j < n; j++){if(nums[i] + nums[j] == target) return {i, j};}}return {};}
};
// 法1.2 
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int n = nums.size();for(int i = 1; i < n; i++){for(int j = 0; j < i; j++){if(nums[i] + nums[j] == target) return {i, j};}}return {};}
};
// 法2
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> idx; // 创建一个空哈希表for(int j = 0; ; j++){auto it = idx.find(target - nums[j]);if(it != idx.end())return {it->second, j};idx[nums[j]] = j;}}
};
// 法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 t = target - nums[i];if(hash.count(t)) return {hash[t], i};hash[nums[i]] = i;}return {};}
};

2.判断是否为字符重排

2.1 题目

题目链接
在这里插入图片描述

2.2 思路

在这里插入图片描述

2.3 代码

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

3. leetcode.217.存在重复元素

3.1 题目

题目链接
在这里插入图片描述
在这里插入图片描述

3.2 思路

在这里插入图片描述
这个题思路跟上一个题的思路有点像,使用哈希表,从前往后遍历,从1开始遍历,判断哈希表中时候有此时的值,没有的话,把现在的值插入哈希表中,然后遍历下一个位置。

3.3 代码

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. leetcode.219.存在重复的元素Ⅱ

4.1 题目

题目链接
在这里插入图片描述
在这里插入图片描述

4.2 思路

在这里插入图片描述
在这里插入图片描述

4.3 代码

// 法一 两层循环遍历
class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {for(int i = 0; i < nums.size(); i++){for(int j = i + 1; j <= i + k && j < nums.size(); j++){if(nums[i] == nums[j])return true;}}return false;}
};
// 法二 哈希表
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. leetcode.49.字母异位词分组

5.1 题目

题目链接
在这里插入图片描述

5.2 思路

在这里插入图片描述
在这里插入图片描述

5.3 代码

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> hash;// 1. 把所有的字母异位词分组for(auto s : strs){string tmp = s;sort(tmp.begin(), tmp.end());hash[tmp].push_back(s);}// 2. 把结果提取出来vector<vector<string>> ret;for(auto& [x, y] : hash){ret.push_back(y);}return ret;}
};

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

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

相关文章

【前缀和】矩阵区域和

文章目录 1314. 矩阵区域和解题思路1314. 矩阵区域和 1314. 矩阵区域和 ​ 给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和: i - k <= r <= i + k, j - k <= c <= j + k …

MyBatis的SQL映射文件中,`#`和`$`符号的区别

在MyBatis的SQL映射文件中,#和$符号用于处理SQL语句中的参数替换,但它们的工作方式和使用场景有所不同。 #{} 符号 预编译参数:#{} 被用来作为预编译SQL语句的占位符。这意味着MyBatis会将你传入的参数设置为PreparedStatement的参数,从而防止SQL注入攻击,并允许MyBatis对…

Linux中为某个进程临时指定tmp目录

起因&#xff1a; 在linux下编译k8s&#xff0c;由于编译的中间文件太多而系统的/tmp分区设置太小&#xff0c;导致编译失败&#xff0c;但自己不想或不能更改/tmp分区大小&#xff0c;所以只能通过其他方式解决。 现象&#xff1a; tmp分区大小&#xff1a; 解决方法&#x…

Tomcat中Web应用程序停止时为了防止内存泄漏,JDBC驱动程序被强制取消注册出现原因

1.问题描述 本地Windows环境开发的Springboot项目同样的mysql版本&#xff0c;jdk版本&#xff0c;tomcat版本&#xff0c;本地运行没有任何问题&#xff0c;发布到阿里云服务器上时报以下问题&#xff1a; 06-May-2025 20:06:12.842 警告 [main] org.apache.catalina.loader…

主流国产大模型(以华为盘古大模型和腾讯混元大模型为例)API调用接口的具体参数和使用方法,包括Python和C++的示例代码

以下是主流国产大模型&#xff08;以华为盘古大模型和腾讯混元大模型为例&#xff09;API调用接口的具体参数和使用方法&#xff0c;包括Python和C的示例代码。 华为盘古大模型 API参数&#xff1a; - model&#xff1a;模型名称&#xff0c;如pangu-nlp-large。 - messages&…

高效调用京东 API 实战:商品详情页实时数据采集接口开发指南​

在当今数字化商业环境中&#xff0c;电商数据的实时获取与分析对于企业的决策制定和市场竞争力提升至关重要。京东作为国内领先的电商平台&#xff0c;提供了丰富的 API 接口&#xff0c;允许开发者高效地获取商品详情页的实时数据。本文将详细介绍如何通过实战开发&#xff0c…

MFC自定义控件开发与使用指南

MFC自定义控件开发与使用指南 自定义控件、双缓冲 1. 概述 MFC(Microsoft Foundation Classes)框架提供了丰富的内置控件,但在实际开发中,我们常常需要创建自定义控件来满足特定的界面需求。本文将详细介绍如何在MFC中开发自定义控件,并以CCustomTextControl为例,展示自…

第100+40步 ChatGPT学习:R语言实现多轮建模

回顾一下什么叫多轮建模&#xff1a; 要综合判断一个模型好不好&#xff0c;一次随机抽样是不行的&#xff0c;得多次抽样建模&#xff0c;看看整体的性能如何才行&#xff08;特别是对于这种小训练集&#xff09;。 所以我的思路是&#xff0c;随机抽取训练集和验证集2000次…

编码器型与解码器型语言模型的比较

编码器型与解码器型语言模型的比较 1. 引言 自然语言处理&#xff08;NLP&#xff09;领域近年来取得了革命性进展&#xff0c;这在很大程度上归功于基于Transformer架构的语言模型。在这一技术生态中&#xff0c;编码器型&#xff08;Encoder-only&#xff09;和解码器型&am…

python--------修改桌面文件内容

目录 1. 文件的读写1. 写入文件2. 读取文件3. 追加内容到文件 2.file_path 的常见方法1. 绝对路径2. 相对路径3. 使用 os.path 模块构建路径5. 路径操作5. 用户主目录路径 4. 修改文件内容1.将修改后的内容写回文件2. 逐行处理文件内容3. 使用上下文管理器确保文件安全 1. 文件…

爱普生VG7050EFN压控晶振在小基站的应用优势

在 5G 通信时代&#xff0c;小基站作为提升网络覆盖和容量的重要一环&#xff0c;小基站的稳定运行对于保障用户流畅的通信体验起着关键作用。而在小基站的核心组件中&#xff0c;时钟信号源的质量直接影响着通信质量和设备性能。爱普生VG7050EFN晶振凭借其高性能、小尺寸和低功…

人工智能如何革新数据可视化领域?探索未来趋势

在当今数字化时代&#xff0c;数据如同汹涌浪潮般不断涌现。据国际数据公司&#xff08;IDC&#xff09;预测&#xff0c;全球每年产生的数据量将从 2018 年的 33ZB 增长到 2025 年的 175ZB。面对如此海量的数据&#xff0c;如何有效理解和利用这些数据成为了关键问题。数据可视…

精益数据分析(42/126):移动应用商业模式的深度剖析与实战要点

精益数据分析&#xff08;42/126&#xff09;&#xff1a;移动应用商业模式的深度剖析与实战要点 在创业和数据分析的学习之路上&#xff0c;我们持续探索不同商业模式的奥秘&#xff0c;今天聚焦于移动应用商业模式。我希望和大家一起进步&#xff0c;深入解读《精益数据分析…

未来 CSS:变量、容器查询与新特性的探索

引言&#xff1a;CSS 演进与未来展望 在前端开发的快速发展浪潮中&#xff0c;CSS 已从简单的样式标记语言蜕变为构建现代设计系统的强大基础。根据 HTTP Archive 的 Web Almanac 的调查&#xff0c;超过 86% 的网站已采用至少一项现代 CSS 特性&#xff0c;这一数字仍在持续攀…

概统期末复习--速成

随机事件及其概率 加法公式 推三个的时候ABC&#xff0c;夹逼准则 减法准则 除法公式 相互独立定义 两种分析 两个解法 古典概型求概率&#xff08;排列组合&#xff09; 分步相乘、分类相加 全概率公式和贝叶斯公式 两阶段问题 第一个小概率*A在小概率的概率。。。累计 …

论微服务架构设计及应用

目录 摘要(300~330字) 正文(2000~2500字,2200字为宜) 背景介绍(500字做左右) 论点论据(1500字做左右)

【东枫科技】AMD / Xilinx Alveo™ V80计算加速器卡

AMD / Xilinx Alveo™ V80计算加速器卡 AMD/Xilinx Alveo ™ V80计算加速器卡是一款功能强大的计算加速器&#xff0c;基于7nm Versal™ 自适应SoC架构而打造。 AMD/Xilinx Alveo V80卡设计用于内存密集型任务。 这些任务包括HPC、数据分析、网络安全、传感器处理、计算存储和…

基于大模型的自然临产阴道分娩全流程预测与方案研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究意义 1.3 国内外研究现状 二、大模型技术原理与应用概述 2.1 大模型基本原理 2.2 在医疗领域的应用现状 2.3 用于分娩预测的优势 三、术前预测与准备方案 3.1 产妇身体状况评估指标 3.2 大模型预测流程与方法 3.3 基于预…

macbook install chromedriver

# 打开 Chrome 访问以下地址查看版本 chrome://version/# 终端查看版本号 (示例输出: 125.0.6422.113) /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version测试&#xff1a;

LeetCode 790 多米诺和托米诺平铺 题解

对于本题不去看LeetCode的评论区和题解很难想到如何去dp&#xff0c;毕竟就算再怎么枚举也很难找到适用于面向结果的规律。所以对于题解我建议大家还是去看一下灵神给的题解&#xff0c;以下是灵神汇总的图&#xff0c;如果能看懂的话&#xff0c;对于解决题目有很大的帮助。 根…