代码随想录训练营第6天

news2024/11/18 17:42:49

专题:哈希表

题目:有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

例如 输入: s = "anagram", t = "nagaram" 输出: true

说明: 你可以假设字符串只包含小写字母。

 题目理解:因为只要小写字母,一共就26个,所以我们可以采用开辟一个大小是26的数组,充当哈希表,来记录元素的个数,很方便。我们可以先遍历数组s然后,它里面出现的元素减‘a’字符,两个字符的差就是一个整数,可以充当哈希表的下标,然后在对于 下标的位置执行++操作直到遍历完第一个数组;遍历第2个数组的时候,继续利用 数组元素减‘a’字符,差值充当哈希表的下标,对对应下标的元素执行--操作,直到循环完毕。 最后查看哈希表数组里面元素,如果有不等于0的元素,说明两个数组 不是有效字符异位词。

 细节注意:数组哈希表,里面保存的是整形数字,而不是字符。int hush [26]={0};

                    哈希数组初始化为0,真的很很重要!!!!要不然后面没办法判断!

代码实现:

学到知识:把要处理的数据 和 哈希表的下标 产生联系,并且在要处理的数据  对应的哈希表的下标  处的元素执行++或--操作。哈希表核心:(在特定的位置,记录特定元素的个数) 

题目:两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

题目理解:因为数组可能特别大特别大(此时没有说明数组的大小时),而且要求结果去重 并且不考虑输出的顺序,此时我们就会考虑使用unordered_set

注意点:

使用数组来做哈希的题目,是因为题目都限制了数值的大小。

而这道题目没有限制数值的大小,就无法使用数组来做哈希表了。

而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。

细节注意:将数据插入unordered_set 里面,他就会自动去重,然后以数组形式输出的时候,需要vector<int>(set.begin(),set.end())进行输出。

代码实现:

 

 很多娃娃说:那么遇到哈希表问题,我直接使用unordered_set就好了啊,他能自动去重,还可以使用find()直接查找,多方便。但是问题就是,set它消费时间特别多,效率不高。一般情况,如果能使用数组的情况下,尽可能使用数组。

题目:快乐数

如果 n 是快乐数就返回 True ;不是,则返回 False 。

「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。

题目解析:核心就是,这个快乐数的计算过程中的结果有可能是一个循环。所以我们需要把每次的计算结果的值,保存在一个地方,然后每次得到新的值,就去判断,这个值是不是和以前计算的结果相同,相同说明就已经循环了,退出。不相同继续执行。我们就用unordered_set 保存 每次计算的结果。

细节注意: 就是这个getSum的思想。 isHappy 思想很简单,但是代码操作还要注意!!

 

题目:两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

例如:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

题目理解:给定一个数组,给定一个目标值,返回数组中和为目标值的两个数组元素的下标,有多对的时候,只返回第一次出现的元素下标。因为问题是,我遍历当前这个数组,然后每到一个元素,我就要判断我以前遍历过的数组元素里面,有没有和(目标值-当前元素)大小一样的值。如果有的话,返回当前元素 和 查找到的那个元素的 下标。如果没查到,就把当前的 数组元素值 和 元素下标 插入到 map里面(插入key值用来查找,vale用来记录元素对应的数组下标,需要一次插入两个数据,所以使用map)。

核心原理:就是只有一个数组,我们遍历这个数组,把遍历过的元素的值和下标,保存进map这个容器里面 map.insert(pair<int,int> key,vale)。然后遍历数组过程,每到一个元素,我就去遍历查找一下map,看里面有没有和(目标值-当前数组元素值)大小一样的值,如果有的话,就返回map里面那个key值对应的vale值,所以使用map.

细节注意:为啥使用哈希表?:因为我们要在遍历数组的时候,要将遍历过的元素的值和下标保存在一个容器里面,并且要去查找当前的元素对应(目标值-当前元素的值)是否在另一个容器里面出现过。

                  为啥使用使用map?:因为一次保存两个数组map<int,int>(key,vale);key用来查找,vale值用来赋值。

                  为啥选择unordered_map?:它的底层实现是哈希表,查找O(1),去重并且不要求有序;

代码实现:

 

 总结:快乐学习,才能养成习惯,

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

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

相关文章

av_interleaved_write_frame():Broken pipe

使用FFmpeg命令rtsp推流到Docker中MediaServer服务器&#xff0c;15秒timeout一到就会打印错误信息&#xff0c;如下图&#xff1a; av_interleaved_write_frame():Broken pipe 命令中指定rtsp传输方式为tcp&#xff08;-rtsp_transport tcp &#xff09;&#xff0c;虽然不会…

第二证券|锂电起火风险完美解决?美科学家研发新型超高盐度电解质

现在&#xff0c;研讨人员正致力于以各种方式改善电池技能&#xff0c;其中最重要的是处理可燃性问题。 美国科学家们近期研宣布了一种新的电解质配方&#xff0c;就能够以一种十分有出路的方式处理这一问题&#xff0c;依托额定的盐含量来防止有问题发生的化学反应。 众所周知…

[附源码]JAVA毕业设计疫情期间高校师生外出请假管理系统录屏(系统+LW)

[附源码]JAVA毕业设计疫情期间高校师生外出请假管理系统录屏&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&am…

婚礼策划预约小程序开发,拓展客户人群

婚礼对于所有人来说都是非常重要的一件事&#xff0c;是人生中最值得回忆的美好场景。在经济水平的不断提高下&#xff0c;人们在结婚之前都要找专业团队对婚礼进行策划&#xff0c;让婚礼更加完美&#xff0c;正因如此&#xff0c;婚礼策划行业得到了迅速发展。但是从众多策划…

Zabbix-proxy安装(zabbix 6.0LTS)

关于zabbix 系列的博文我已经很久没有更新了&#xff0c;主要原因是最近太忙了。如果读者诸君有认真阅读我前面的文章并亲自实践过的话&#xff0c;相信你肯定会大有收获的。到目前为止zabbix 的基础知识在我的博文中基本已经全都涉及到了&#xff0c;至于如何运用&#xff0c;…

赛狐ERP11月新功能汇总 | 13大场景,超90项功能升级

赛狐ERP月度《产品升级》栏目来啦&#xff01; 11月我们加紧迭代了运营、进销存、财务、报表等多个维度的功能内容&#xff0c;聚焦卖家关注的需求要点&#xff0c;进行了13大业务场景&#xff0c;超90项功能升级。赛狐ERP将不断优化产品细节&#xff0c;提升卖家体验&#xf…

CH36X系列接口芯片Linux系统开发库说明

一、概述 ch36x_lib库是Linux系统下用于开发CH36X系列设备CH365/CH367/CH368等芯片应用的软件接口库&#xff0c;此接口库主要提供以下功能&#xff1a; 设备打开/关闭 获取芯片类型/驱动版本 获取IO基地址/Memory基地址/中断号 配置空间读写&#xff08;支持单字节/双字节…

基于java+springboot+mybatis+vue+mysql的体育场馆运营系统

项目介绍 在系统流程分析当中调查分析它是比较重要的环节&#xff0c;因为在这个系统当中它都涉及到每个环节的业务流程&#xff0c;所以从计算机毕业设计SpringBootVue选题推荐—体育场馆运营系统的设计的整体设计上要保证各个信息的正确输入和输出以及对数据储存的完整&…

linux下JDK安装

先下载离线安装包&#xff0c;我将安装包直接放到/root/softPackages目录下&#xff08;需要安装包可私聊&#xff09; 1.卸载已有OpenJDK(如果有) 查找已经安装的OpenJDK包 rpm -qa | grep java 如果有查出结果&#xff0c;直接yum -y remove卸载即可&#xff1a; 例如&a…

MobileNetV1作为CenterNet的Backbone尝试

1、CenterNet对于Backbone的要求是&#xff1a; 输入为512*512&#xff0c;输出为&#xff1a;heatmap&#xff08;128*128*C&#xff09;、wh&#xff08;128*128*2&#xff09;、reg&#xff08;128*128*2&#xff09;。 2、原生的MobileNet V1输出&#xff1a; 最后一层通…

JSP:使用 sitemesh/decorator装饰器装饰jsp页面(原理及详细配置)

摘要&#xff1a;首先这个Decorator解释一下这个单词&#xff1a;“装饰器”&#xff0c;我觉得其实可以这样理解&#xff0c;他就像我们用到的Frame&#xff0c;他把每个页面共有的东西提炼了出来&#xff0c;也可能我们也会用各种各样的include标签&#xff0c;将我们的常用页…

关于使用C语言实现负值和非负值进行左右划分,奇数和偶数进行左右划分

目录 1.负值和非负值左右划分 2.偶数和奇数的划分 数据结构之折半查找&#xff08;递归和非递归&#xff09;&#xff0c;插值查找和斐波那契查找 归并排序求逆序对&#xff08;C语言&#xff09; 1.负值和非负值左右划分 要求&#xff1a;使用尽可能少的时间将一组连续的序…

BlockRender for 3DMAX一键区域渲染插件使用教程

BlockRender一键区域渲染插件&#xff0c;自定义区域渲染并在视口中直接查看结果&#xff0c;并可以自动或手动对渲染的图像进行保存。 这个小插件的亮点就在于它能对渲染的图像进行保存&#xff0c;如果没有保存图像的功能&#xff0c;显然这个插件没有任何存在的意义。有了保…

分布式操作系统 - 6.分布式同步控制

文章目录1.物理时钟同步1.1 时钟同步问题1.2 时钟同步算法1.3 网络时间协议&#xff08;1&#xff09;Christian算法&#xff08;2&#xff09;考虑的问题&#xff08;3&#xff09;Berkeley算法-集中式方法&#xff08;4&#xff09;平均值算法-非集中式方法&#xff08;5&…

python教程十 列表

列表 序列是 Python 中最基本的数据结构。 序列中的每个值都有对应的位置值&#xff0c;称之为索引&#xff0c;第一个索引是 0&#xff0c;第二个索引是 1&#xff0c;依此类推。 Python 有 6 个序列的内置类型&#xff0c;但最常见的是列表和元组。 列表都可以进行的操作…

java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_3_Linux整起(Linux常见命令操作、Shell)

OS的一些基本概念简介&#xff0c;在下面两篇中已经介绍了一些&#xff1a; OS_Part_1整起&#xff08;进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制&#xff09;OS_Part_2整起~IO们那些事【包括五种IO模型&#xf…

爬虫内容学习-工具类---xpath-1

爬虫学习建议&#xff1a; 在编写python爬虫程序时&#xff0c;只需要做以下两件事&#xff1a; 发送GET请求&#xff0c;获取HTML [第一类]解析HTML&#xff0c;获取数据 [第二类] 这两件事&#xff0c;python都有相应的库帮你去做&#xff0c;你只需要知道如何…

ubuntu20.04 搭建kernel调试环境第四篇--图形化调试kernel

一、安装eclipse 1&#xff09;官网下载对应的版本&#xff08;eclipse-inst-jre-linux64.tar.gz&#xff09; Eclipse Packages | The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects... 2&#xff09;…

群集【LNMP+SSL+nfs+负载均衡及高可用】

目录 &#x1f990;web1部署 &#x1f341;创建证书 &#x1f341;创建论坛 &#x1f990;mysql部署 &#x1f990;php部署 &#x1f990;nfs部署 &#x1f341;创建共享目录 &#x1f341;挂载目录 &#x1f990;LNMP测试 &#x1f990;web2部署 &#x1f990;lb1部署 &#x…

资料:成为全栈dApp开发者的学习计划

资料&#xff1a;成为全栈dApp开发者的学习计划 本篇介绍与区块链和去中心化应用程序有关的一切。 前提条件 任何面向对象编程语言的基础知识。Node.js和Npm。前端基础知识。如果你有兴趣做一个全栈的去中心化应用&#xff0c;而不仅仅是智能合约。 流程 去中心化技术和区块…