代码随想录算法训练营Day6 | 242.有效的字母异位词 ●349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

基础:

1.哈希表是根据关键值进行直接访问的数据结构,时间复杂度是O(1),也就是通过数组的索引下标,直接访问数组中的元素哈希表的作用就是用来快速判断一个元素是否出现在集合里。

2.常见的哈希结构:

  • 数组
  • set (集合)
  • map (映射)

List, Set, Queue, Map 区别?
List(对付顺序的好帮手): 存储的元素是有序的、可重复的。
Set(注重独一无二的性质): 存储的元素不可重复的。
Queue(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。
Map(用 key 来搜索的专家): 使用键值对(key-value)存储,类似于数学上的函数 y=f(x),“x” 代表 key,“y” 代表 value,key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值。

242.有效的字母异位数

题目:

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

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

题目链接:242. 有效的字母异位词

卡哥的视频链接:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词

题目思路:创建一个数组,遍历两个字符串,遍历第一个字符串时,把出现的字符串的ASCII码求出来,减去“a”的ASCII码,并得出数值,并在相应的数组位置加一,遍历第二个数组的时候变成减一,如果数组中有不为零的元素,则说明两个字符串不是完全一样的,本题只要求两个字符串所包含的元素相同,顺序无所谓。

代码示例:

代码逻辑详解:

  1. int []record = new int[26];:创建一个长度为26的整数数组 record,用于记录每个字母在字符串 s 中出现的次数。数组的下标表示字母的索引,例如 record[0] 对应字母 a 的出现次数,record[1] 对应字母 b 的出现次数,以此类推。

  2. for (int i = 0; i < s.length(); i++) {...}:遍历字符串 s 中的每个字符,对 record 数组进行更新。具体来说,对于字符串 s 中的每个字符,将该字符转换为相对于字母 a 的偏移量,并将对应的 record 数组中的计数加一。

  3. for (int i = 0; i < t.length(); i++) {...}:同样地,遍历字符串 t 中的每个字符,但这次是将对应的 record 数组中的计数减一。

  4. for(int count:record) {...}:使用增强型 for 循环遍历 record 数组中的每个元素 count。如果存在任何一个元素不等于0,说明字符串 s 中的某些字符在字符串 t 中没有完全匹配,因此返回 false

  5. 如果上述循环结束后,没有返回 false,则说明字符串 s 和字符串 t 是字母异位词,返回 true

这段代码利用了一个技巧,即通过一个数组来记录字符串中每个字母的出现次数。在遍历完两个字符串后,只需检查数组中的元素是否都为0,即可判断两个字符串是否为字母异位词。

leetcode提交记录:

小tips:

charAt(i) 函数 是获取字符串中i位置的字符

s.charAt(i) - 'a'求字母的ascii码之间的差值。

string.charAt(i) - '0'将其转换为整数。

循环条件得出字符串的长度时,length后面记得加括号!!

349. 两个数组的交集

题目:给定两个数组 nums1 和 nums2 ,返回 它们的 

交集

 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

题目链接:349. 两个数组的交集

卡哥的视频链接:学透哈希表,set使用有技巧!Leetcode:349. 两个数组的交集

题目思考:我们只需要找到相同的元素即可,所以重复的可以忽略,所以我们申请两个set集合,因为set集合中的元素不可以重复,申请两个set集合,把第一个数组中包含的元素录入set1,把同时包含在set1和数组2的元素录入set2,最后遍历输出set2集合中的元素即可

代码示例:

代码逻辑详解:

  1. if(nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) { return new int[0]; }:首先,检查输入的数组是否为 null 或长度为 0。如果其中任何一个数组为空,则返回一个空数组,因为两个空数组的交集也是空。

  2. Set<Integer> set1 = new HashSet<>();:创建一个 HashSet 集合 set1,用于存储 nums1 数组中的元素。这样做是为了方便快速查找 nums2 数组中的元素是否存在于 nums1 中。

  3. Set<Integer> resSet = new HashSet<>();:创建一个 HashSet 集合 resSet,用于存储两个数组的交集。

  4. for(int i : nums1) { set1.add(i); }:遍历 nums1 数组中的元素,将每个元素添加到 set1 集合中。由于集合中不允许重复元素,这样可以确保 set1 中不会包含重复元素。

  5. for(int i : nums2) { if(set1.contains(i)) { resSet.add(i); } }:遍历 nums2 数组中的元素,对于每个元素,检查是否存在于 set1 集合中。如果存在,则将该元素添加到 resSet 集合中,这样 resSet 集合中存储的就是两个数组的交集。

  6. int[] arr = new int[resSet.size()];:创建一个数组 arr,其长度为 resSet 集合的大小,这样数组的长度就是交集的大小。

  7. int j = 0; for(int i : resSet) { arr[j] = i; j++; }:遍历 resSet 集合中的元素,并将每个元素存储到数组 arr 中。这样,数组 arr 中存储的就是两个数组的交集。

  8. return arr;:返回存储交集元素的数组 arr

leetcode提交记录:

小tips:

得出集合长度是size而不是length

202.快乐数

题目:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

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

题目链接:202.快乐数

此题卡哥无视频讲解

快乐数示例:

输入:19
输出:true
解释:

1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

题目思考:编写求快乐数的函数,当所要求的数字不是一,也不重复时,就调用函数,计算出是否是快乐数

代码示例:

代码逻辑详解:

  1. Set<Integer> a = new HashSet<>();:创建一个 HashSet 集合 a,用于存储出现过的数字。这样做是为了检测循环,如果在循环中出现了重复的数字,就说明这个数不是快乐数。

  2. while (n != 1 && !a.contains(n)) { ... }:使用 while 循环,循环条件是当 n 不等于 1 且集合 a 中不包含当前数字 n 时执行循环。这个循环会持续直到 n 变为 1(即快乐数)或者出现了重复的数字(即非快乐数)。

  3. a.add(n);:将当前数字 n 加入到集合 a 中,标记为已经访问过。

  4. n = getNextNumber(n);:调用 getNextNumber(n) 方法,根据当前数字 n 计算下一个数字,并将其赋值给 n。

  5. public int getNextNumber(int n) { ... }:定义了一个方法 getNextNumber(int n),用于计算下一个数字。在这个方法中,首先将 n 的各个位上的数字平方后相加,然后返回这个结果。

  6. return n == 1;:如果循环结束后,n 等于 1,则说明这个数是快乐数,返回 true;否则,返回 false。

通过这段代码,可以判断一个整数是否是快乐数。如果一个数是快乐数,那么经过一系列计算后会得到 1;如果不是快乐数,会进入一个循环,最终导致计算出现重复的数字。

leetcode提交记录:​​​​​​​

小tips:注意循环的条件!还有HashSet的写法

1.两数之和

题目:

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

题目链接:1. 两数之和

卡哥的视频链接:梦开始的地方,Leetcode:1.两数之和,学透哈希表,map使用有技巧!

题目思考:

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

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

相关文章

计算机视觉 | 交通信号灯状态的检测和识别

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目旨在使用计算机视觉技术检测交通信号灯的状态&#xff0c;主要针对红色和绿色信号灯的识别。通过分析输入图像中的像素颜色信息&#xff0c;利用OpenCV库实现对信号灯状态的检测和识别。 目录 一、项目背景 二、项目功能…

CalcPad(2) 单位设置和绘制图表

CalcPad(2) 单位设置和绘制图表 Hi uu们&#xff0c;CalcPad用的还好吗&#xff1f;有发现一些问题吗&#xff1f; 在我的使用中&#xff0c;经常需要指定一些计算结果的符号&#xff0c;比如说我希望ADC最小分辨率的计算结果是以uV展示&#xff0c;那我们该怎么操作呢&#…

DB索引B+树SQL优化

数据库的索引就像一本书的目录&#xff0c;查数据快人一步&#xff0c;快速定位&#xff0c;精准打击&#xff01; 什么是数据库的索引&#xff1f; 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说&#xff0c;数据库索引好比是一本书前面的目录&#xff0c;能加…

入坑 Node.js 1

原文&#xff1a;https://blog.iyatt.com/?p14717 前言 前面刚刚对 Spring Boot 有了个概念&#xff0c;再来学学 Node.js&#xff0c;顺便当学 JavaScript&#xff0c;为后面入前端做准备。 环境 Node.js 20.12.2 官方 API 文档&#xff1a;https://nodejs.org/docs/lat…

IBM SPSS Statistics for Mac:强大的数据分析软件

IBM SPSS Statistics for Mac是一款功能强大的数据分析软件&#xff0c;专为Mac用户设计&#xff0c;提供了一系列专业的统计分析和数据管理功能。无论是科研人员、数据分析师还是学生&#xff0c;都能从中获得高效、准确的数据分析支持。 IBM SPSS Statistics for Mac v27.0.1…

day_8题解

利用最大公约数求最小公倍数 #include<iostream> using namespace std;int gcd(int a,int b) {return b?gcd(b,a%b):a; }int main() {long long a,b;cin>>a>>b;long long ansgcd(a,b);cout<<(a*b)/ans<<endl;return 0; }排序遍历&#xff0c;记…

支持中文繁体,支持同时配置并启用飞书和Lark认证,JumpServer堡垒机v3.10.8 LTS版本发布

2024年4月22日&#xff0c;JumpServer开源堡垒机正式发布v3.10.8 LTS版本。JumpServer开源项目组将对v3.10 LTS版本提供长期的支持和优化&#xff0c;并定期迭代发布小版本。欢迎广大社区用户升级至v3.10 LTS最新版本&#xff0c;以获得更佳的使用体验。 在v3.10.8 LTS版本中&…

一款支持串口、网口自定义协议的调试软件

ComMax通讯调试软件是一款支持自定义串口&#xff0c;网口通讯协议的调试软件&#xff0c;用户可以根据需要&#xff0c;自定义协议包&#xff0c;然后根据接受的数据选择要发送的数据包。是一款强大、好用的调试软件。 点击下载 提取码&#xff1a;wmfg 不用安装 下载解压即…

《史铁生》-随记

史铁生的文案进一段总是刷到&#xff0c;文字在某些时候真的是一种无形的动力。小时候学过的书&#xff0c;长大了才会更加理解其中的蕴意。如看到的文字所说&#xff0c;教育具有长期性和滞后性&#xff0c;就像一个闭环&#xff0c;多年后你有一个瞬间突然意识到什么&#xf…

怎么通过微信小程序实现远程控制包间内的电器

怎么通过微信小程序实现远程控制包间内的电器呢&#xff1f; 本文描述了使用微信小程序调用HTTP接口&#xff0c;实现控制包间内的电器&#xff0c;专用的包间控制器&#xff0c;可独立控制包间内的全部电器&#xff0c;包括空调。 可选用产品&#xff1a;可根据实际场景需求&…

ChatGPT在线网页版(与GPT Plus会员完全一致)

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

假设检验分析方法

目录 1.什么是假设检验分析方法 2.作用 3.使用 1.什么是假设检验分析方法 在数据分析中&#xff0c;假设检验是一种统计方法&#xff0c;用于确定样本数据是否支持对总体参数的某种假设。此法在数据分析中被广泛应用&#xff0c;可以帮助研究人员进行科学的推断和决策&#…

【bug】使用mmsegmentaion遇到的问题

利用mmsegmentaion跑自定义数据集时的bug处理&#xff08;使用bisenetV2&#xff09; 1. ValueError: val_dataloader, val_cfg, and val_evaluator should be either all None or not None, but got val_dataloader{batch_size: 1, num_workers: 4}, val_cfg{type: ValLoop}, …

visionTransformer window平台下报错

错误&#xff1a; KeyError: Transformer/encoderblock_0/MlpBlock_3/Dense_0kernel is not a file in the archive解决方法&#xff1a; 修改这个函数即可&#xff0c;主要原因是Linux系统与window系统路径分隔符不一样导致 def load_from(self, weights, n_block):ROOT f&…

配置 rust国内源

rust crate.io 配置国内源&#xff08;cargo 国内源&#xff09; warning: spurious network error (2 tries remainin..._warning: spurious network error (3 tries remaining-CSDN博客

YOLOv5改进 | Conv篇 | 利用CVPR2024-DynamicConv提出的GhostModule改进C3(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制&#xff0c;这个论文中介绍了一个名为ParameterNet的新型设计原则&#xff0c;它旨在在大规模视觉预训练模型中增加参数数量&#xff0c;同时尽量不增加浮点运算&#x…

orbslam2+kitti数据集序列图像

文章目录 一、下载ORB Slam2依赖二、安装编译ORB_SLAM2三 、运行Kitee数据集3.1 数据集准备3.2 启动&#xff01;&#xff01;&#xff01; 安装ORB Slam2遇到的问题总结参考资料 一、下载ORB Slam2依赖 Orb Slam2 需要下载的依赖项&#xff1a; Pangolin0.5 、Eigen3.1以上、…

跨语言大模型最新综述

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

jmeter5.4.1源码编译(IDEA)问题解决

问题现象&#xff1a;最近想更深入的研究下jmeter5.4.1的原理及功能具体实现&#xff0c;从官网down了个源码&#xff0c;在本地使用IDEA工具导入项目、编译时&#xff0c;报以下错误&#xff1a; class jdk.internal.loader.ClassLoaders$PlatformClassLoader cannot be cast…

Web前端安全问题分类综合以及XSS、CSRF、SQL注入、DoS/DDoS攻击、会话劫持、点击劫持等详解,增强生产安全意识

前端安全问题是指发生在浏览器、单页面应用、Web页面等前端环境中的各类安全隐患。Web前端作为与用户直接交互的界面&#xff0c;其安全性问题直接关系到用户体验和数据安全。近年来&#xff0c;随着前端技术的快速发展&#xff0c;Web前端安全问题也日益凸显。因此&#xff0c…