[代码随想录06]哈希表的使用,有效字母异位词,两数组交集,快乐数,两数之和

前言

哈希表是什么?一句话带你理解,简单来说我们对于杂乱的数据,怎么快速找到数据,如何做呢?一般的做法就是遍历复杂度为o(N)去找寻一个数据,但是吧,我们这样思考的话,还是花了大量时间去检查其他元素是否存在这个集合里面,如何优化呢?我们通过特定的计算把每个值都用特定的值来唯一表示起来,我们每次查询只需要通过计算,然后看这个特定的结构里面是否有对应映射的值,这种情况下,我们的查询效率就能达到o(1),这个做法也就是前文提到的空间换时间。

有了特定的索引值去表示,这个数据是否存在,那么就会存在哈希冲突,哈希冲突就是多个值对应一个索引值,我们就无法判断。这个时候一般的做法就是再哈希,线性探测(闭散列),拉链法(开散列)拉一个链表在冲突的地方。

HashTable的三种结构:①数组 ②set ③unordered_map对应底层的数据结构也是不一样的

题目链接

242. 有效的字母异位词 - 力扣(LeetCode)

349. 两个数组的交集 - 力扣(LeetCode)

202. 快乐数 - 力扣(LeetCode)

1. 两数之和 - 力扣(LeetCode)

一、有效的字母异位词

思路:三个for循环搞定,一个for循环就是把数据存进去,第二个for循环就是把数据取走,第三个for循环就是检查还有没有数据在里面。就能判定字母是否是异位词。

 tips:使用数组可以在空间的效率上有提升。这道题建议使用数组能起到联系的作用。

class Solution {
public:
//使用数组bool isAnagram1(string s, string t) {if(s.length()!=t.length())return false;int records[26]={0};for(auto it:s)  records[it-'a']++;for(auto it:t)  records[it-'a']--;for(auto it:records){if(it!=0)return false;}return true;}
//使用map表bool isAnagram2(string s, string t) {if(s.length()!=t.length())return false;unordered_map<int,int>dic;for(auto it:s)  dic[it]+=1;for(auto it:t)  dic[it]-=1;for(auto it:dic){if(it.second!=0)return false;}return true;}
};

二、两个数组的交集

思路:两个数组的交集,我们首先想到的就是用哈希的思想去找到两个共同元素,这样就强迫我们私用不能重复的结构set,然后用一个对结果集合进行去重,一个就是单纯用来存放一组数据的,方便我们去遍历查找,最后我们使用。

//使用set去重,然后循环遍历查找入结果集。vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int>result_set;unordered_set<int>nums_set(nums1.begin(),nums1.end());for(auto num:nums2){if(nums_set.find(num)!=nums_set.end())result_set.insert(num);}return vector<int>(result_set.begin(),result_set.end());}

leetcode 对数值的大小修订之后我们就可以使用数组来解决这个问题。

vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int>result_set;int hash[1005]={0};for(auto num:nums1){hash[num]=1;}for(int num:nums2){if(hash[num]==1)result_set.insert(num);}return vector<int>(result_set.begin(),result_set.end());}

三、快乐数

思路:题目说了直到1为止就会跳出循环。

int bitsum(int n){int sum=0;while(n){sum+=(n%10)*(n%10);n=n/10;}return sum;
}
bool isHappy(int n) {unordered_set<int>set;while(1){int sum=bitsum(n);if(sum==1)return true;if(set.find(sum)!=set.end()) return false;set.insert(sum);n=sum;}
}

 使用快慢指针的方法,循环两者终将会相遇

int bitsum(int n){int sum=0;while(n){sum+=(n%10)*(n%10);n=n/10;}return sum;}bool isHappy(int n) {int slow=n,fast=n;do{slow=bitsum(slow);fast=bitsum(fast);fast=bitsum(fast);}while(slow!=fast);return slow==1;}

四、两数之和

哈希表的精髓所在:直接使用target-num[i]去查找一个元素的是否存在集合中。

vector<int> twoSum(vector<int>& nums, int target) {int n=nums.size();unordered_map<int,int>mp;for(int i=0;i<n;i++){auto it=mp.find(target-nums[i]);if(it!=mp.end()) return {it->second,i};mp[nums[i]]=i;}return {};}

总结

学会了哈希表的用法,我们主要掌握一个思想,判断一个数是否在集合里,使用什么最快,当然是哈希表。当然这个比较对比的方式可以不同,比如第二题,两个比较,第三题和自己比较,第四题相减比较。共同进步!兄弟们!!!!!!!

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

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

相关文章

三维路径规划|基于黑翅鸢BKA优化算法的三维路径规划Matlab程序

三维路径规划|基于黑翅鸢BKA优化算法的三维路径规划Matlab程序 文章目录 前言三维路径规划|基于黑翅鸢BKA优化算法的三维路径规划Matlab程序基于黑翅鸢BKA优化算法的三维路径规划一、研究基本原理二、黑翅鸢BKA优化算法的基本步骤&#xff1a;三、详细流程四、总结 二、实验结果…

【问题】webdriver.Chrome()设置参数executable_path报不存在

场景1: 标红报错unresolved reference executable_path 场景2: 执行报错TypeError: __init__() got an unexpected keyword argument executable_path 原因&#xff1a; 上述两种场景是因为selenium4开始不再支持某些初始化参数。比如executable_path 解决&#xff1a; 方案…

Java - JSR223规范解读_在JVM上实现多语言支持

文章目录 1. 概述2. 核心目标3. 支持的脚本语言4. 主要接口5. 脚本引擎的使用执行JavaScript脚本执行groovy脚本1. Groovy简介2. Groovy脚本示例3. 如何在Java中集成 Groovy4. 集成注意事项 6. 与Java集成7. 常见应用场景8. 优缺点9. 总结 1. 概述 JSR223&#xff08;Java Spe…

无序抓取系列(一)

文章目录 一 摘要 二 资源 三 内容 一 摘要 最近&#xff0c;已经提出了许多抓取检测方法&#xff0c;这些方法可用于直接从传感器数据中定位机器人抓取配置&#xff0c;而无需估计物体姿态。其基本思想是将抓握感知视作计算机视觉中的对象检测。这些方法将噪声和部分遮挡的…

论文阅读:Deep divergence-based approach to clustering

论文地址&#xff1a;main.pdf (sciencedirectassets.com) 摘要 深度学习研究中的一个有前景的方向是通过优化判别损失函数&#xff0c;学习表示并同时发现无标签数据中的聚类结构。与监督式深度学习不同&#xff0c;这一研究方向尚处于起步阶段&#xff0c;如何设计和优化合适…

关于单片机的原理与应用!

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///目前正在学习C&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于单片…

Flink四大基石之CheckPoint(检查点) 的使用详解

目录 一、Checkpoint 剖析 State 与 Checkpoint 概念区分 设置 Checkpoint 实战 执行代码所需的服务与遇到的问题 二、重启策略解读 重启策略意义 代码示例与效果展示 三、SavePoint 与 Checkpoint 异同 操作步骤详解 四、总结 在大数据流式处理领域&#xff0c;Ap…

字典树TRIE

模板 模板总共分为两部分 插入一个字符串查找一个字符串 int idx 0; int trie[3000010][150]; int ans[3000010];##原理 trie[上节点编号][下方连接的字母] 下方连接的字母的节点编号 trie[0][0]1;trie[0][1]5; trie[1][1]2; trie[2][1]4;trie[2][2]3; trie[5][2]6; tri…

【MySQL-6】MySQL的复合查询

1. 整体学习的思维导图 2. 回顾基本查询 使用scott数据库中的表&#xff0c;完成以下查询&#xff1a; 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为大写的J mysql> select * from emp where (sal>500 or jobMANAGER) and ename …

STL算法之其它算法_中

目录 lower_bound(应用于有序区间) upper_bound&#xff08;应用于有序区间&#xff09; binary_search&#xff08;应用于有序区间&#xff09; next_permutation prev_permutation lower_bound(应用于有序区间) 这是二分查找(binary search)的一种版本&#xff0c;试图在…

[高阶数据结构六]最短路径算法

1.前言 最短路径算法是在图论的基础上讲解的&#xff0c;如果你还不知道图论的相关知识的话&#xff0c;可以阅读下面几篇文章。 [高阶数据结构四] 初始图论_初始图结构-CSDN博客 [高阶数据结构五] 图的遍历和最小生成树_图的遍历和生成树求解-CSDN博客 本章重点&#xff1a;…

uniapp:封装商品列表为组件并使用

封装商品列表为组件并使用 商品组件封装 <template><!-- 商品列表 --><view class"goods_list"><view class"goods_item" v-for"item in goods" :key"item.id"><image :src"item.img_url">…

【AI系统】LLVM 架构设计和原理

LLVM 架构设计和原理 在上一篇文章中&#xff0c;我们详细探讨了 GCC 的编译过程和原理。然而&#xff0c;由于 GCC 存在代码耦合度高、难以进行独立操作以及庞大的代码量等缺点。正是由于对这些问题的意识&#xff0c;人们开始期待新一代编译器的出现。在本节&#xff0c;我们…

【C语言】结构体(二)

一&#xff0c;结构体的初始化 和其它类型变量一样&#xff0c;对结构体变量可以在定义时指定初始值 #include <stdio.h> #include <stdlib.h> struct books // 结构体类型 {char title[50];char author[50]; //结构体成员char subject[100];int book_id; }…

四、初识C语言(4)

一、作业&#xff1a;static修饰局部变量 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> //作业&#xff1a;static修饰局部变量 int sum (int a) {int c 0;static int b 3;c 1;b 2;return (abc); } int main() {int i 0;int a …

Linux 中的 ls 命令:从使用到源码解析

ls 命令是 Linux 系统中最常用和最基本的命令之一。下面将深入探讨 ls 命令的使用方法、工作原理、源码解析以及实际应用场景。 1. ls 命令的使用** ls 命令用于列出目录内容&#xff0c;显示文件和目录的详细信息。 1.1 基本用法 ls [选项] [文件或目录]例如&#xff1a; …

The selected directory is not a valid home for Go SDK

在idea里配置go语言的环境时&#xff0c;选择go语言的安装目录&#xff0c;一直提示这个 The selected directory is not a valid home for Go SDK后来查了一下&#xff0c;发现原来idea识别不出来 需要改一下配置文件&#xff0c;找到go环境的安装目录&#xff0c;我是默认安…

Leetcode581. 最短无序连续子数组(HOT100)

链接 我的代码&#xff1a; class Solution { public:int findUnsortedSubarray(vector<int>& nums) {vector<int> res nums;sort(res.begin(),res.end());int l 0,r nums.size()-1;while(nums[l]res[l]){l;if(lnums.size()){return 0;}}while(nums[r]res…

SQL优化与性能——数据库事务管理

数据库事务管理是数据库系统中至关重要的一部分&#xff0c;确保了数据的一致性、完整性、可靠性和隔离性。尤其在高并发、高负载的系统中&#xff0c;事务管理的设计和实现直接影响到系统的稳定性和性能。本章将详细探讨以下内容&#xff1a;事务的ACID特性、使用 BEGIN、COMM…

【Robocasa】Code Review

文章目录 OverviewalgoInitializationImportant Class MethodsTrain LoopTest Time ConfigsdemoConfig FactoryConfig StructureConfig Locking默认锁定状态配置修改的上下文管理器 dataset示例数据集对象参数说明 model基础模块EncoderCoreVisualCoreScanCore随机化器 (Random…