代码随想录 算法刷题打卡合集
文章平均质量分 76
每日更新代码随想录算法刷题题目,总结自己的思路和解题关键点,持续联系算法基本功。
FLTS
南方科技大学研究生在读,奋力补充SLAM知识,还在学习,还在犯错。
展开
-
代码随想录算法训练营第五十一天 | 139.单词拆分
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。原创 2024-02-22 14:32:18 · 378 阅读 · 0 评论 -
代码随想录算法训练营第五十天 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数
题目要求的是凑成对应总金额最少的硬币个数,所以dp[i]就表示凑成容量i的最少的硬币个数,递推公式就是取可能凑出当前容量的硬币数量的最小值,要考虑的有两种情况,一种是原来就推出来的dp[j],另一种是遍历到了当前物品,那么把当前物品算进来,dp[j-i]个硬币加上当前这一个硬币凑出容量j,这两种情况取小值存起来。然后考虑一下初始化问题,因为是取最小值,所以都初始化为INT_MAX,但是又要考虑到第一个有效数值从哪里获取,那就是dp[0]=0,然后第一个硬币刚好凑出来时就加1存到dp[j]中。原创 2024-02-22 14:14:56 · 889 阅读 · 0 评论 -
代码随想录算法训练营第四十四天 | 518. 零钱兑换 II、377. 组合总和 Ⅳ
题目中求的是组合数,所以dp[i]的含义就是刚好填满容量i的硬币组合数,所以递推公式是累加,由于求组合不是排列,所以遍历顺序是先物品后背包,注意初始化过程不能直接={0},dp[0] = 1。数字可以无限次使用,所以是完全背包问题,其余和上一道题目一样,唯一区别是求排列,遍历顺序需要先背包后物品,然后在递推公式处需要一个额外的判断条件防止无效的遍历,还有就是leetcode测试数据里有求和大于INT_MAX的情况,所以也要加到判断条件里去。请你计算并返回可以凑成总金额的硬币组合数。原创 2024-02-17 22:28:05 · 424 阅读 · 0 评论 -
代码随想录算法训练营第四十三天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
今天总结一下昨天的分割等和子集和今天三道题的的思路,都属于01背包问题。其实仔细观察就会发现,这四道题目本质上都是题目提供了一个集合,都需要在集合中选出满足目标的子集,且每个元素只能选一次,所以都是01背包问题。分割等和子集:不需要思路转换;石头:为了得到最小的石头,需要石头相撞,求出一个需要凑的子集,其和尽量接近整个集合求和的一半;目标和:加和减分别是子集,所以也是求子集,满足求和等于目标值;一和零:选字符串集合,尽量多个字符串。原创 2024-02-07 17:01:48 · 867 阅读 · 0 评论 -
代码随想录算法训练营第四十二天 | 416. 分割等和子集
给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。原创 2024-02-06 23:41:28 · 450 阅读 · 0 评论 -
代码随想录算法训练营第四十一天 | 343. 整数拆分、96.不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。今天的两道题目难度很大。相同特点是需要两层循环,第一层是填写dp数组的循环,第二层是和递推公式相关的。返回 你可以获得的最大乘积。原创 2024-02-05 14:02:31 · 364 阅读 · 0 评论 -
代码随想录算法训练营第三十九天 | 62.不同路径、 63. 不同路径 II
今天主要的收获就是dp数组扩展到了二维的情况。感觉dp题目的逻辑比前面的还简单。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。原创 2024-02-04 22:20:46 · 793 阅读 · 0 评论 -
代码随想录算法训练营第三十八天 | 509. 斐波那契数、 70. 爬楼梯、746. 使用最小花费爬楼梯
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。F(n) = F(n - 1) + F(n - 2),其中 n > 1。每次你可以爬 1 或 2 个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。需要 n 阶你才能到达楼顶。给定 n ,请计算 F(n)。原创 2024-02-04 00:03:36 · 369 阅读 · 0 评论 -
代码随想录算法训练营第三十七天 | 738.单调递增的数字、 968.监控二叉树
关键思想在于后序遍历二叉树,通过子节点的状态来判断当前节点的状态。还有比较难想的就是怎么划分状态,还有对每种状态的处理方式,直接看讲解还是比较符合思维习惯的,但是自己想不好想,还有最后对根节点无覆盖的处理非常容易忽视,遇到报错有可能会发现。关键思想在于从后向前遍历,遇到需要改的地方后面都需要改为9,所以就只记录最前面需要改的地方即可。当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增。原创 2024-02-01 14:10:49 · 382 阅读 · 0 评论 -
代码随想录算法训练营第三十六天 | 435. 无重叠区间、763.划分字母区间、56. 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。今天三道题用了三种不同的细节做法,一个是直接在原数组上更新,第二种是用left right记录,第三种是直接在结果数组上更新。这道题自己想没理清楚,还想着要在原数组上改动还是用left right记录,结果讲解里直接更新结果数组,这种思路明显更符合习惯的思维方式。给你一个字符串 s。原创 2024-01-31 22:32:06 · 385 阅读 · 0 评论 -
代码随想录算法训练营第三十五天 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。可以射出的弓箭的数量 没有限制。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。说实话,贪心太难总结了,我甚至自己理解了做法都没有办法做总结,只能是多看多练了,目前唯一能做的就是多练几遍,保证完全理解,希望以后再看到类似题目能有印象和经验。原创 2024-01-30 22:32:50 · 875 阅读 · 0 评论 -
代码随想录算法训练营第三十四天 | 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果
给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。见注释,思路写的很详细了,把每一步写代码时的思考都写了。见注释,思路写的很详细了,把每一步写代码时的思考都写了。见注释,思路写的很详细了,把每一步写代码时的思考都写了。原创 2024-01-29 23:28:41 · 401 阅读 · 0 评论 -
代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
我认为难点就在于对于一些特殊情况和边界条件的考虑,像是提供的数组仅含一个元素的这种特殊情况单独写判断就好了,但是其他的情况中,为了解决特殊情况和写出准确的边界条件往往是杂糅在一起的。我认为解决办法就是一定要先固定一个规则中的意义,否则两头一起考虑问题非常容易乱,这个思想和以前的循环不变量有相似之处,我尽量在后面的记录里指出这个思路的应用方法。数组中的每个元素代表你在该位置可以跳跃的最大长度。见注释,思路写的很详细了,把每一步写代码时的思考都写了。见注释,思路写的很详细了,把每一步写代码时的思考都写了。原创 2024-01-27 14:09:50 · 367 阅读 · 0 评论 -
代码随想录算法训练营第三十一天 | 455.分发饼干、376. 摆动序列、53. 最大子序和
我们要让首部元素和中间元素一样判断,那么就假设首部前面有一个相等的元素,这时就和第二个问题产生关联了,因为这个时候就出现了相等的元素,于是判断里就变成了preDiff<=0 && curDiff >0 || preDiff>=0 && curDiff<0,这时要在中间元素测试一下看看有什么漏洞,我们会发现当中间元素出现相等时,无非两种情况,最后“摆动”起来了,最后没“摆动”,然后会发现在相等的这个平坡开始处不会记录,同样首部前一个虚拟元素不会被记录;假设你是一位很棒的家长,想要给你的孩子们一些小饼干。原创 2024-01-27 10:44:20 · 744 阅读 · 0 评论 -
代码随想录算法训练营第二十九天 | 491.非递减子序列、46.全排列、47.全排列 II
这道题目是子集问题,需要startIndex去重,然后给定数组中也有重复元素,所以还需要used数组去重。原创 2024-01-25 23:38:01 · 924 阅读 · 0 评论 -
代码随想录算法训练营第二十八天 | 93.复原IP地址、78.子集、90.子集II
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给你一个整数数组 nums ,数组中的元素 互不相同。给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。原创 2024-01-24 00:10:44 · 363 阅读 · 0 评论 -
代码随想录算法训练营第二十七天 | 39. 组合总和 、40.组合总和II、131.分割回文串
给的数组有重复元素,每个元素只能用一次,所以递归时要从下一个数字开始尝试加入,另外一定要先排序,因为要去重,排序以后才方便去重,去重的逻辑是:比如[1,1,1,2,3],第一个选1以后,第二个可以选第二个1,也可以选第3个1,但是假如target=4,这样导致递归到[1,1,2]可能是第一个1和第二个1,也可能是第一个1和第三个1,所以递归时再选择第二个数字时要跳过第三个1这种情况,就判断当前层for循环遍历到的数字和前一个数字是否相同,相同跳过。如果至少一个数字的被选数量不同,则两种组合是不同的。原创 2024-01-23 00:20:03 · 392 阅读 · 0 评论 -
代码随想录算法训练营第二十五天 | 216.组合总和III、17.电话号码的字母组合
第二个bug是终止条件想复杂了,其实就判断path的长度以及是否满足想要的东西就行了,其他情况怎么递归都无所谓,因为不会加入result。剪枝确实还是不要太好想。而且剪枝似乎有很多可以优化的地方,不能全部都想全,只能把最显而易见的剪枝考虑到,否则可能判断的太多反而不好吧。感觉最近刷题质量细下降了,花的时间也不够多,确实自己写了一遍代码,但是总会写出bug,自己还查不出来,需要gpt协助。感觉最近刷题质量细下降了,花的时间也不够多,确实自己写了一遍代码,但是总会写出bug,自己还查不出来,需要gpt协助。原创 2024-01-21 10:45:35 · 457 阅读 · 0 评论 -
代码随想录算法训练营第二十四天 | 回溯算法终于开始了!77. 组合
这道题的思路和想象中的回溯有点区别,我以为回溯是可以不需要额外的太多考虑,而只考虑递归即可。但事实上需要自己先做好一些细节处理工作,比如这道题,递归函数的构思是需要计划好的,因为本身并不存在一个树结构,因此在思考解题过程中需要自己给出一个树的结构,比如选了1,剩下的就要从234里选这样。所以我想应该是再考虑用回溯算法解题时,无论如何要先尝试用树结构画出一幅图像然后再思考递归函数的逻辑。另外感觉这个递归函数的设计还是非常灵活的,自己如果有想法还是要自信一点尝试多写写。你可以按 任何顺序 返回答案。原创 2024-01-19 19:24:53 · 351 阅读 · 0 评论 -
代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树 、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。改变结构,所以递归函数要返回节点,要接住,遇到超过区域的点整个子树和当前节点都不要,返回另一端子树。所以结果应当返回修剪好的二叉搜索树的新的根节点。只修改节点值,递归不返回节点,记录累加值,从大向小遍历,所以右中左。原创 2024-01-19 00:13:04 · 369 阅读 · 0 评论 -
代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
这里就体现了上面的总结,插入节点非常简单,遍历到插入位置,新建一个节点即可。原创 2024-01-17 23:49:08 · 338 阅读 · 0 评论 -
代码随想录算法训练营第二十一天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
第二种方法是利用二叉搜索树性质,中序遍历就是有序的从小到大,注意处理当前节点时频率的记录和更新,为了判断当前节点值是否等于上一个节点值需要pre指针,如果频率追平最大频率,当前节点值要放入结果数组,如果超过最大频率,要及时清空结果数组,并放入当前节点值,还要记得及时更新pre指针。原创 2024-01-16 23:40:46 · 841 阅读 · 0 评论 -
代码随想录算法训练营第二十天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
递归法最简单,递归函数意义就是返回以传入节点为根节点的树是否是有效二叉搜索树,关键点在于要记录当前遍历的最大值,用这个判断当前节点是否大于左子树所有值,因为是中序遍历,左子树先遍历完,会存起来左子树最大值,然后可以判断当前节点,如果不满足直接返回false,注意相等也false,然后再遍历右子树,遍历完都有效就是true。思路:递归法构建,先找到当前数组中最大的数构建当前节点,同时记录下标,然后左侧的数组递归构建当前节点的左子树,右侧数组递归构建当前节点右子树。节点的右子树只包含 大于 当前节点的数。原创 2024-01-16 00:32:15 · 1501 阅读 · 0 评论 -
代码随想录算法训练营第十八天 | 513.找树左下角的值、112. 路径总和、113. 路径总和Ⅱ、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树。给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。原创 2024-01-14 00:41:56 · 345 阅读 · 0 评论 -
代码随想录算法训练营第十七天 | 110. 平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
肯定是要遍历,那就用递归法,==这里总结一下心得,用递归法深度遍历就要考虑哪种遍历顺序,根据就是要做什么处理,比如这道题,要判断子树的信息,那就是后序遍历。==定义递归函数的意义:返回以传入节点为根节点的树的高度。一个细节就是判断是否为高度平衡二叉树,用-1表示不是,如果子节点不是高度平衡二叉树,那当前的节点也肯定不是了,算是一个小优化。我的理解就是有递归就要有回溯,但是是有前提的,前提就是只有当递归以后改变了传入参数的信息,并且传入参数在本次递归中还需要利用的就需要回溯,也就是把修改的内容去除掉。原创 2024-01-13 01:08:40 · 648 阅读 · 0 评论 -
代码随想录算法训练营第十六天 | 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。方案二:递归法,要注意的点比较多,虽然是取最小深度,但是必须是到叶子节点的深度,因此只要当前节点有子节点,就要递归获取,如果有两个子节点,就递归获取到叶子节点深度更小的深度。方案二:递归法,递归获取子树的深度,要注意边界条件的设置,是遍历到空指针返回深度0,然后因为要取最大深度,所以取左右子树中更深的一个,再加上本节点的一层,然后返回结果。这也是本题的考察目的。原创 2024-01-11 23:51:18 · 933 阅读 · 0 评论 -
代码随想录算法训练营第十五天 |二叉树层序遍历(10道题目)、226.翻转二叉树、101. 对称二叉树
这里我暂时认为就是递归的思路,关键思想在于如何判断轴对称,其实判断轴对称我们应该始终手动提供两侧对应位置的节点(也就是讲解中说的内侧还是外侧,因为是二叉树,所以要么同时提供内侧,要么同时提供外侧),然后递归的结束条件需要仔细考虑一下,注意两侧都为空时返回true,然后处理如果两侧值都相等,如何向下进行递归,递归就是判断下一层的子节点是否还对称,如果都对称,回溯到这一层最终就要返回true。感觉讲解里写的反而有些复杂了,可能出于严谨的考虑。给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。原创 2024-01-10 14:40:10 · 338 阅读 · 0 评论 -
代码随想录算法训练营第十四天 |二叉树理论基础、递归遍历、迭代遍历
然后要注意的就是,我们如何利用栈遍历二叉树,首先栈式先入后出,假设要进行前序遍历,前序遍历式中左右,放入栈里的顺序就要是右左中,然后如何确定要处理节点了呢?我们规定访问节点就是指当前指针走到了这个节点,不做处理操作,处理节点才是把当前指针走到的节点输出(在题目中就是放到结果容器中)。每次循环访问栈顶元素时,如果遇到了空指针就说明要处理节点了,把空指针pop掉,再取栈顶元素,处理一下,再pop掉。我学习中只关注了递归法和统一迭代法,因为我认为不统一的迭代法性价比不高。,这个自己要好好体会。原创 2024-01-09 13:57:30 · 451 阅读 · 0 评论 -
代码随想录算法训练营第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素
关于C++中排序和建堆的比较规则:std::greater()、std::less()、自定义比较规则,感兴趣的读者可以看一下,自己理解一遍下次复习看自己的博客会更快复习完。原创 2024-01-08 19:41:02 · 860 阅读 · 0 评论 -
代码随想录算法训练营第十一天 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
思路就是遇到数字就放入栈中,遇到运算符就把前面两个数字取出来运算再放入栈中,==要注意两个数字的前后顺序,==还有就是这道题目里说了32位表达,但是讲解里说leetcode后台改了数据,要用long long,据我所知long long是有符号64位整数,然后注意数字放入栈中要把字符串转化为long long再放入,用stoll()函数,最后的结果是long long赋值给int,这里不知道为什么不存在潜在问题。输入:tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,“原创 2024-01-06 11:18:08 · 813 阅读 · 0 评论 -
代码随想录算法训练营第十天 | 232.用栈实现队列、225. 用队列实现栈
这道题目要求用队列实现栈,我们不必再用两个队列,因为队列和栈无非就是入栈和出栈的顺序不同,只要仔细思考一下就会发现,入栈操作,我们就向队列中push即可,出栈时为了让最后进入队列的元素出去,我们不得不把队列前面的元素都pop掉,但是不能实际扔掉前面的值,于是我们就把前面的值再放到队列末尾即可。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。原创 2024-01-05 20:25:05 · 1574 阅读 · 0 评论 -
代码随想录算法训练营第九天 | 28. 实现 strStr()、459.重复的子字符串
解释: 可由子串 “abc” 重复四次构成。(或子串 “abcabc” 重复两次构成。的文章,然后再看文章讲解,很容易理解,我自己看过以后写代码,对KMP算法理解的非常深刻。给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。这道题目的解题思路很巧妙,巧妙之处在于判断是否由重复子串构成的思路。证明过程在文章讲解的链接里很充分了,建议先看我的。输入: s = “abcabcabcabc”解释: 可由子串 “ab” 重复两次构成。输入: s = “abab”输入: s = “aba”原创 2024-01-04 23:49:45 · 379 阅读 · 0 评论 -
KMP算法详解
详细解读KMP算法原创 2024-01-04 19:10:55 · 754 阅读 · 0 评论 -
代码随想录算法训练营第八天 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串
于是我们写出了for循环的条件,接下来开始进行处理,注意到我们第一次遍历i=0,那我们要处理前k个字符,这时就要开始考虑特殊情况,我们先考虑特殊情况,都考虑完了,一般情况用else概括就可以,一般情况的代码比较好写,我们最后再写。为了不利用额外空间,所以我们考虑到先扩展字符串,然后从后向前给字符串赋值,实际就是移动字符,在这个过程中加入对数字的判断,如果是数字,进行一个number的替换,给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。原创 2024-01-04 00:15:13 · 916 阅读 · 0 评论 -
代码随想录算法训练营第七天 | 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
这种题目逃不开遍历,我们唯一能做的就是降低时间复杂度,为了降低复杂度,首先把四个数组两两一起处理遍历,然后利用哈希表进行查找判断是否有满足和为0的值,这里采用map数据结构是因为这道题目不需要去重,在遍历两个数组时,两组不同的数值可能构成同样的和,但不能漏掉,所以用map存储映射关系,key是和,value是出现该值的次数。给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!如果可以,返回 true;你返回所有和为 0 且不重复的三元组。原创 2024-01-03 00:46:04 · 877 阅读 · 0 评论 -
代码随想录算法训练营第六天 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数 、1. 两数之和
第二点,为了找到交集,就涉及到查找元素,本题中元素是数字,数字范围太大,比如0-9999,这导致哈希值范围很大,所以不适合用数组,由于我们不需要存储其他意义的东西,仅需要存储元素即可,所以用set就够了,set先存nums1的每个元素(数字),再遍历nums2在nums1的数字构成的set中查找,找到了就说明该数字是交集的一部分,存入结果set中,最后返回结果即可。注意到这点以后,就出现了查找的需求,如果发现有循环,即查找当前平方和发现之前出现过,那就不是快乐数,如果平方和为1,就是快乐数。原创 2024-01-01 23:58:19 · 799 阅读 · 0 评论 -
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
。原创 2023-12-27 19:23:56 · 945 阅读 · 0 评论 -
代码随想录算法训练营第四天 |24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II
代码随想录算法训练营第四天 |24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II原创 2023-12-30 16:36:58 · 866 阅读 · 0 评论 -
代码随想录算法训练营第二天| 977. 有序数组的平方、209.长度最小的子数组、59.螺旋矩阵Ⅱ
代码随想录算法训练营第二天| 977. 有序数组的平方、209.长度最小的子数组、59.螺旋矩阵Ⅱ原创 2023-12-28 15:04:33 · 798 阅读 · 2 评论 -
代码随想录算法训练营第三天| 203.移除链表元素 、707.设计链表 、206.反转链表
2、和虚拟头节点相关,我自己在实现添加头部节点时产生了一个问题,题目该功能函数返回值是void,我怎么让当前类持有最新的头节点,于是我写的bug里就出现了修改this指针这种情况,其实我知道不对,但是不知道怎么实现,另外就是由于是在做题,就处处想着判题的程序能否识别我添加的其他成员变量,其实在类里添加虚拟头节点,改变虚拟头节点的next指针就可以了,自己写的时候过于畏手畏脚了,这也是平常自己写代码的时候一个不好的习惯。大致记录一下自己的思路。2、最后删除了虚拟头节点的指针,我自己写的没有回收这个内存。原创 2023-12-29 19:05:25 · 1668 阅读 · 0 评论