代码随想录算法训练营第五天|242.有效的字母异位词,349.两个数组的交集,202.快乐数,1.两数之和
242.有效的字母异位词看到题目的第一想法题目的意思就是说给两个字符串判断两个字符串里面的相同字母个数是不是一样的。那我遍历我的第一个字符串记录下它的字母个数然后再遍历我第二个字符串记下它字母个数一比较就OK了。看完代码随想录的第一想法遍历字符串的想法是正确的但是我缺少了如何记录字母个数的方法。用上哈希表的话确实就能记录字母的个数。这里有两个很妙的点第一个就是能把数组当做哈希表来使用。第二个就是通过将字符串遍历出来的字母减去字符串a就能得到0至25中的任意一个数再以这个数作为数组的地址变化的值作为数组的值。这样就能精准地26个字母的数量。用自己的话描述首先设置一个26位的数组a。开始遍历第一个字符串字符串遍历出来的字母减去字符串a就能得到0~25中的任意一个数num1在数组a中的num位置加1。直到将第一个字符串遍历完成开始遍历第二个字符串用同样的方法得到num2在数组a中num2的位置进行减1。最后遍历这个数组a如果其中有一项不为0就return false否则return true代码classSolution{publicbooleanisAnagram(Strings,Stringt){//首先设置一个26位的数组a。int[]anewint[26];//开始遍历第一个字符串字符串遍历出来的字母减去字符串a就能得到0~25中的任意一个数num1//在数组a中的num位置加1。直到将第一个字符串遍历完成for(inti0;is.length();i){a[s.charAt(i)-a];}//开始遍历第二个字符串用同样的方法得到num2在数组a中num2的位置进行减1。for(inti0;it.length();i){a[t.charAt(i)-a]--;}//最后遍历这个数组a如果其中有一项不为0就return false否则return truefor(intcount:a){if(count!0){returnfalse;}}returntrue;}}实现过程中遇到哪些困难思路通了之后就没有遇到什么困难了。今日收获记录一下自己的学习时长第一个收获能把数组当做哈希表来使用。第二个收获字母减去字符串 a就能得到这个字母是在字母表中的第几个数。以此可以去创作一个数组版的字母表。大概一个小时349.两个数组的交集看到题目的第一想法题目的意思就是说给两个数组看看他们之中的交集。输出这个交集的数组。看到这一题我就想着和上一题差不多思路的写法。将这两个数组的数字都存到两个新的数组a,b中以数字为地址值存数字的个数。然后再遍历两个数组a,b。如果同时都不为零。将这个数组的地址存入另一个新数组c中。最后输出新数组c。看完代码随想录的第一想法1.用数组来做哈希的题目都是因为题目限制了数值的大小。而且如果哈希值比较少、特别分散、跨度非常大使用数组就造成空间的极大浪费。本题后面 力扣改了 题目描述 和 后台测试数据增添了 数值范围1 nums1.length, nums2.length 10000 nums1[i], nums2[i] 1000所以就可以 使用数组来做哈希表了 因为数组都是 1000以内的。2.这一题主要是学会使用一种哈希数据结构unordered_set要留意题目说明输出结果中的每个元素一定是唯一的也就是说输出的结果的去重的 同时可以不考虑输出结果的顺序版本一使用HashSet用自己的话描述先是创建两个哈希集合set1,reset。set1用于记录num1的内容并去重reset用于记录set1和num2的交集。遍历数组num2同时问set1中是否存在如果存在就加入reset中。另外申请一个数组存放reset中的元素,最后返回数组代码classSolution{publicint[]intersection(int[]nums1,int[]nums2){//忘记处理边界值要创建一个空数组必须明确指定长度或显式提供初始化元素new int[0]或new int[] {}if(nums1null||nums1.length0||nums2null||nums2.length0){returnnewint[0];}//先是创建两个哈希集合set1,reset。//set1用于记录num1的内容并去重reset用于记录set1和num2的交集SetIntegerset1newHashSet();SetIntegerreSetnewHashSet();//遍历数组num1for(inti:nums1){set1.add(i);}//遍历数组num2同时问set1中是否存在如果存在就加入reset中for(inti:nums2){if(set1.contains(i)){reSet.add(i);}}//方法1将结果集合转成数组/** * 将 SetInteger 转换为 int[] 数组 * 1. stream() : Collection 接口的方法将集合转换为 StreamInteger * 2. mapToInt(Integer::intValue) : * - 中间操作将 StreamInteger 转换为 IntStream * - 使用方法引用 Integer::intValue将 Integer 对象拆箱为 int 基本类型 * 3. toArray() : 终端操作将 IntStream 转换为 int[] 数组。 */returnreSet.stream().mapToInt(Integer::intValue).toArray();//方法2另外申请一个数组存放reset中的元素,最后返回数组int[]arrnewint[reSet.size()];intj0;for(inti:reSet){arr[j]i;}returnarr;}}版本二使用Hash数组用自己的话描述将这两个数组的数字都存到两个新的数组a,b中以数字为地址值存数字的个数。然后再遍历两个数组a,b。如果同时都不为零。将这个数组的地址存入另一个新动态数组c中。代码classSolution{publicint[]intersection(int[]nums1,int[]nums2){//将这两个数组的数字都存到两个新的数组a,b中以数字为地址值存数字的个数。int[]anewint[1024];int[]bnewint[1024];for(inti:nums1){a[i];}for(inti:nums2){b[i];}//然后再遍历两个数组a,b。如果同时都不为零。将这个数组的地址存入另一个新动态数组c中。ListIntegercnewArrayList();for(inti0;i1024;i){if(a[i]0b[i]0){c.add(i);}}//方法1将结果动态数组c转成数组// return c.stream().mapToInt(Integer :: intValue).toArray();//方法2另外申请一个数组存放动态数组c中的元素,最后返回数组int[]arrnewint[c.size()];intj0;for(inti:c){arr[j]i;}returnarr;}}实现过程中遇到哪些困难没有遇到什么困难今日收获记录一下自己的学习时长学会了return c.stream().mapToInt(Integer :: intValue).toArray();快速将Integer类型的值快速拆为int类型数组。HashSet有着去重效果202.快乐数看到题目的第一想法快乐数有多快乐结果毫无头绪看完代码随想录的第一想法读懂题目真的挺重要的。1.理解无限循环 -求和的过程中sum会重复出现 2.记住这句当我们遇到了要快速判断一个元素是否出现集合里的时候就要考虑哈希法了我确实是不会这一题下面是我看完题解后的理解用自己的话描述首先给你个数。比如说这个数是19。题目要求你将1和9平方之后加在一起。于是得到了82。根据例子经过两次相同计算就会得到1。那么你就已经初步理解了题目。关键在于不断循环下去只会有两个结果一个是得到1另外一个是无限循环。而无限循环的另一个理解就是得到一个过往得到的数。那么这个时候你就已经有了初步的思路。开始理清整个题目的脉络首先这个数n 19传了进去。n要进入循环这个循环继续的条件就是得到n ! 1或者得到哈希集合record中没有的数record.contains(n)。这个哈希集合一开始是没有数的进去循环的第一步我就要先把一开始的数n传入哈希集合record中。这样这个哈希集合record利用它无序、不重复的特点。创造出了循环退出的条件。即是n 1或record.contains(n)。开始拆分19这个数字。替换循环的数n。如果这个数n不在record中进入下一轮循环如果record.contains(n)或者n 1那么就那这个n和1进行比较如果n 1,就返回true如果n ! 1 就返回false代码classSolution{publicbooleanisHappy(intn){//创建一个哈希集合用于记录不重复的数SetIntegerrecordnewHashSet();//设置循环继续的条件为n ! 1 !record.contains(n)反之如果n 1 || record.contains(n)while(n!1!record.contains(n)){//记录不重复的数进入哈希集合record.add(n);//将n里面的数进行拆分计算放回n里面。ngetNextNumber(n);}//n和1进行比较如果n 1,就返回true如果n ! 1 就返回falsereturnn1;}privateintgetNextNumber(intn){//先设一个加起来的数intnum0;//拆分数字要用循环while(n0){inttemp0;tempn%10;numtemp*temp;nn/10;}returnnum;}}实现过程中遇到哪些困难1.对于无限循环不能理解他隐藏的意思2.想不到怎么使用哈希法今日收获记录一下自己的学习时长1.收获了对题意的理解对无限循环的理解也更加深刻2.收获了对数的处理可以放到另一个函数中去。学习时长大约是1小时1.两数之和看到题目的第一想法有一点思路遍历第一个数加上遍历第二个数应该做个嵌套的for循环就解决了看完代码随想录的第一想法刚刚那个想法也是可以的那种是属于暴力的解法。代码随想录的这个用HashMap解决的做法会跟高级一些。其原理也简单易懂。但还是有一点要知道在什么时候用哈希法在查看这个元素在不在集合中一个元素有没有出现过。这个题目就属于要查看已经存入HashMap中的值有没有需要的用自己的话描述就是遍历当前数组中的元素计算出当前元素需要的目标元素然后去HashMap中寻找如果找到了就将当前元素和目标元素的下标存入数组res中没找到就将当前元素存入HashMap中key为当前元素value为当前元素的下标。代码classSolution{publicint[]twoSum(int[]nums,inttarget){// 就是遍历当前数组中的元素计算出当前元素需要的目标元素然后去HashMap中寻找如果找到了就将当前元素和目标元素的下标存入数组res中没找到就将当前元素存入HashMap中key为当前元素value为当前元素的下标。int[]resnewint[2];MapInteger,IntegerrecordnewHashMap();// 就是遍历当前数组中的元素for(inti0;inums.length;i){//计算出当前元素需要的目标元素inttemptarget-nums[i];// 去HashMap中寻找如果找到了就将当前元素和目标元素的下标存入数组res中没找到就将当前元素存入HashMap中if(record.containsKey(temp)){res[0]record.get(temp);res[1]i;break;}record.put(nums[i],i);}//返回当前数组resreturnres;}}实现过程中遇到哪些困难思路有了就没什么困难今日收获记录一下自己的学习时长学习了怎么用HashMap这个数据结构。半个小时

相关新闻

C++异步编程核心:深入理解std::future的五种高效用法与工程实践

C++异步编程核心:深入理解std::future的五种高效用法与工程实践

1. 项目概述:为什么我们需要深入理解std::future?在C的世界里,异步编程早已不是锦上添花,而是应对现代软件复杂性的必需品。无论是处理高并发的网络请求、执行耗时的文件I/O,还是为了保持UI界面的流畅响应,…

2026/7/21 5:52:47阅读更多 →
C++高性能定时器实现:分层时间轮设计与工程实践

C++高性能定时器实现:分层时间轮设计与工程实践

1. 项目概述:为什么我们需要自己造一个定时器轮子?在C的世界里,尤其是高性能服务器、游戏引擎、金融交易系统这些对时间精度和性能有极致要求的领域,定时器是一个再基础不过的组件。你可能用过标准库的std::chrono来计时&#xff…

2026/7/21 5:52:47阅读更多 →
理解RTOS多任务系统,仿写

理解RTOS多任务系统,仿写

目录 一、理解 FreeRTOS 任务调度的底层原理 二、仿写 FreeRTOS 任务调度器 1. 任务创建函数设计 2. 调度器触发机制 3. 中断处理流程 4. 任务启动机制 5. 任务切换过程 6. 上下文恢复 7. 实现效果展示 一、理解 FreeRTOS 任务调度的底层原理 二、仿写 FreeRTOS 任务…

2026/7/21 5:52:47阅读更多 →
redis持久化RDB与AOF

redis持久化RDB与AOF

文章目录 RDB简介持久化触发条件RDB的优缺点AOF简介AOF的三种持久化规则AOF的重写机制AOF文件修复AOF的优缺点 RDB简介 RDB是Redis默认用来进行持久化的一种方式,根据配置文件中的save m n配置自动触发bgsave将当前内存中的数据集以快照的方式写入到磁盘中并生成一…

2026/7/21 15:51:37阅读更多 →
AI竞争力跃迁公式:掌握这7个底层思维模型,3个月甩开90%同行

AI竞争力跃迁公式:掌握这7个底层思维模型,3个月甩开90%同行

更多请点击: https://kaifayun.com 第一章:AI时代竞争力跃迁的本质逻辑 在AI技术深度渗透各行业的当下,个体与组织的竞争力跃迁已不再依赖于单一技能的线性积累,而源于认知范式、工具链协同与价值交付节奏的系统性重构。这种跃迁…

2026/7/21 15:51:37阅读更多 →
async 和 await(详解)

async 和 await(详解)

一、async 和 await promise 使用 .then 链式调用,但也是基于回调函数async/await 更加优雅的异步编程的写法 1.它是消灭异步回调的终极武器 2.它是同步语法,也就是用同步的写法写异步的代码 案例1:promise异步加载图片 分别使用 .then 和 aw…

2026/7/21 15:51:37阅读更多 →
网安面试真相:为什么你知识点全会,面试却总是挂科?

网安面试真相:为什么你知识点全会,面试却总是挂科?

📌 前言很多新人刷题无数、笔记满满、漏洞全会复现,但是一到面试就挂。面试官真正淘汰新人的原因,从来不是你不会漏洞,而是你没有工程思维、没有实战逻辑、只会背诵答案。本篇拆解网安面试“隐形扣分点”,帮你解决学得…

2026/7/21 15:51:37阅读更多 →
OpenCV-Python实战(1)——OpenCV简介与图像处理基础

OpenCV-Python实战(1)——OpenCV简介与图像处理基础

OpenCV-Python实战(1)——OpenCV简介与图像处理基础OpenCV介绍Python安装OpenCVOpenCV主要模块OpenCV应用场景OpenCV图像处理基础图像基础图像处理中的主要问题图像处理流程像素、颜色、通道、图像和颜色空间图像描述图像文件类型OpenCV中的坐标系OpenCV…

2026/7/21 15:51:37阅读更多 →
为什么选择command-line-args?深度解析5大核心优势与使用场景

为什么选择command-line-args?深度解析5大核心优势与使用场景

为什么选择command-line-args?深度解析5大核心优势与使用场景 【免费下载链接】command-line-args A mature, feature-complete library to parse command-line options. 项目地址: https://gitcode.com/gh_mirrors/co/command-line-args 在Node.js生态系统中…

2026/7/21 15:49:37阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →