- 博客(23)
- 收藏
- 关注
原创 代码随想录算法训练营第19天| LeetCode 77. 组合 216.组合总和III 17.电话号码的字母组合
解题思路:1、首先确定终止条件:当path路径中的个数等于题目中要求的k时就把该查找结果放入res中进行保存;2、再确定参数和返回值:参数就是题目给定条件,以及在递归中应该从哪里开始的startIndex返回值没有,回溯只需要一个方法对res进行添加即可。3、确定单层回溯逻辑:首先将本层递归的第一个数加到path然后对剩余的数继续遍历,利用递归,不过在每次找到目标之后都要将path最后一个数删掉以完成回溯。
2025-05-11 23:43:47
411
原创 代码随想录算法训练营第18天| LeetCode 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
669. 修剪二叉搜索树解题思路:本题主要是针对左右子树处理逻辑,若当前节点小于最小值,就直接删掉其左子树,继续修剪右子树;反之就删掉右子树,继续遍历左子树。若符合条件,就直接返回当前节点作为结果。注意:主要理解好当前的函数作用以及其对应的返回值。108.将有序数组转换为二叉搜索树解题思路:从根节点触发中左右的顺序,采用前序遍历,在构建子树的时候总把中间数作为根节点返回;定义一个左边界和右边界可以用来区分左右子树。
2025-05-10 15:30:54
157
原创 代码随想录算法训练营第17天| LeetCode 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
解题思路:利用二叉树的性质(左子树节点小于根节点,右子树节点大于根节点)判断当前节点大于还是小于p和q,再选择左右子节点进行遍历,到第一个值处于pq之间的就直接返回结果。
2025-05-07 11:30:29
216
原创 代码随想录算法训练营第16天| LeetCode 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先
当遍历完相同的数值时比较count与maxCount的值,大于它就更新res中的频率最大的数,等于就将这个数添加到res数组中,遍历完这个数组也就记录了一个完整的res数组,找到了频率最高的一些数。首先对于遍历顺序的选取,因为本题需要从叶子节点依次向上递归返回值,直到某一个节点处其left和right都找到了值,才进行返回,因此先进行左右子节点的操作,最后再对根节点进行操作,所以采取后序遍历.分情况对左右子节点进行操作返回值.530.二叉搜索树的最小绝对差。530.二叉搜索树的最小绝对差。
2025-05-06 22:50:12
171
原创 代码随想录算法训练营第15天| LeetCode 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
解题思路:在构造二叉树的时候通常采用前序遍历的方式,先找到根节点,再通过根节点分割左右子树,因此单层遍历的逻辑就是首先遍历数组,找到最大值作为根节点,然后对左右子树进行递归构造。注意终止条件为左右节点之间相差小于1也就是左右区间为0。
2025-05-04 21:41:47
164
原创 代码随想录算法训练营第14天| LeetCode 513.找树左下角的值
3、确定单层递归逻辑:首先将根节点初始化,后序遍历中的最后一个节点必为跟节点,因此可以在前序中找到这个位置,将左右子树可以直接分割,同理分割后序遍历中的左右子树,然后当前节点左节点可以根据分割出来的左子树前序遍历和左子树后序遍历得到,进行递归操作。定义一个深度优先遍历方法,在遍历的过程中记录路径和计算当前路径总和,遍历到叶子节点的时候进行判断是否符合题目条件。2、确定终止条件:当前节点是叶子节点,也就是后序的可用区间为0,因为本题的区间为左闭右开,则为后序遍历数组中的开始和结束索引相同;
2025-04-25 17:30:11
221
原创 代码随想录算法训练营第13天| LeetCode 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 222.完全二叉树的节点个
2、利用满二叉树的性质:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。3、确定递归逻辑:求取当前节点的左右高度差,如果小于等于1就返回左右子树高度大的值,否则返回-1;左叶子节点:当前节点的左子节点不为空,左子节点的左右子节点都为空,则这个节点的左子节点就是左叶子节点。1、确定输入与返回值:root根节点和返回是否为平衡二叉树,找的是高度差,大于1就返回-1;1、确定传入参数和返回值:root节点,返回所有左叶子节点之和。
2025-04-23 21:44:50
357
原创 代码随想录算法训练营第12天| LeetCode 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度
3、梳理递归逻辑:从根节点出发递归获取其左右子节点的深度,并每层返回值加一,记录当前层深度。3、处理逻辑:进行后序遍历,先处理左子树再处理右子树,最后在处理根节点时,将返回的左右子树最大深度再加一,即一层一层向上返回。1、确定返回值和参数:参数(root.left root.right)、返回值为boolean,意为左右子节点是否互为反转;3、确定处理逻辑:首先判断是否递归到最深处,再进行判断其左右子节点的值是否互为反转。3、确定处理逻辑:先交换左右节点的子节点,最后交换左右子节点。
2025-04-22 18:15:47
324
原创 代码随想录算法训练营第11天| LeetCode 150. 逆波兰表达式求值 239. 滑动窗口最大值 347.
确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。
2025-04-21 22:12:40
401
原创 代码随想录算法训练营第10天| LeetCode 150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素
首先判断更新区间需要丢掉的值是否为当前第一个值,如果相等就需要把这个值删掉,并且添加后面新增加的数进来(这里涉及到新增的数需要与前面的数进行一个比较,把小的数直接就删掉,从列表尾部开始一个一个比较);当前采用了小顶堆的方法,因为在小顶堆中堆顶始终会是最小的元素,因此如果遇到了比他大的元素就可以把这个元素删除,这样遍历下来,剩下的小顶堆中就是较大的k个元素了。本题用到了一种单调递减的列表,保证这个列表里面的首位就当前区间上的最大值,难点在于如何添加新的数和区间如果进行了移动,应该怎么更新这个列表里面的值。
2025-04-19 17:23:01
293
原创 代码随想录算法训练营第9天| LeetCode 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
今日总结:总的来说这几个题难度都不大,主要是对java中的栈和队列类以及实现类的方法不太熟悉,因此单独写了一个博客总结了一下有哪些方法;1、初始化一个栈,然后遍历这个字符串,遍历每个之前判断它是否与当前栈顶元素相同,如果相同就弹出栈顶元素,不同就执行入栈操作。2、入栈用于放入元素,出栈用于查看或删除元素,只有当出栈为空的时候才把入栈中的元素放入出栈,这样能保证顺序不乱;2、如果遇到是‘(’就执行压栈操作,如果遇到对应的闭合括号并且栈的顶部为对应的开始括号就执行出栈操作;1、定义一个入栈一个出栈;
2025-04-18 15:46:20
259
原创 代码随想录算法训练营第8天| LeetCode 151.翻转字符串里的单词 卡码网:55.右旋转字符串
双指针一般用于解决区间的问题,在字符串的问题中,很多都可以用双指针来解决,主要核心思路是找到左指针和右指针,以及他们要进行怎么样的处理。在字符串章节里面,因为java中的string不可变因此通常需要新建一个StringBuilder;首先将String类型字符串转换成StringBuilder可变类型,再进行操作。是字符串查找最重要的算法,一定要花时间去掌握。2、分别按照顺序放入新的字符串里。1、可以把整个字符串分为两部分。卡码网:55.右旋转字符串。.翻转字符串里的单词。2、将整个字符串反转。
2025-04-17 12:28:49
257
原创 代码随想录算法训练营第7天| LeetCode 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字
解题思路:直接利用双指针,从两头开始遍历,交换顺序,直到左右指针相遇;本题还有一种交换元素的写法,就是利用了异或运算符。
2025-04-16 16:15:50
236
原创 代码随想录算法训练营第6天| LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
也是用双指针的方法,思路同上,只不过多了一层,并且两层循环都要进行去重操作(这里注意第二层的去重和第一层不一样,第二层去重必须要在j > i + 1的时候才开始)例子就是[2,2,2,2]2、在第i次遍历中,left<right的时候始终进行循环,如果三数之和小于0就把左指针向右移动,相反就把右指针向左移动,如果等于零就直接将这个数组存入到res中;1、如果在某一次遍历中找到了一个符合条件的数组,那么继续移动左右指针,如果移动之后跟原来的值一样就直接跳过,即继续向下移动,此时不做计算操作;
2025-04-15 15:35:56
303
原创 代码随想录算法训练营第5天| LeetCode 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
最后如果hash数组中每个元素都是0,就证明二者是字母异位词。因为这个题里面讲的是返回索引,因此保存数的时候需要把值和索引一起保存,我们选择将值作为key,索引作为value传入hashmap,并提前找到每个数对应的另外一个需要找的数,如果在这个hashmap里面存在,就说明有这样的两个数存在,就返回二者的索引。首先分析这个数的特点,如果这个数不是快乐数,那么当对他进行运算的时候总会重复,由此,可以定义一个HashSet记录出现过的所有数,如果当前计算得到的结果在这个记录中已经存在,就返回false。
2025-04-14 16:31:01
505
原创 代码随想录算法训练营第4天| LeetCode 203.移除链表元素 707.设计链表 206.反转链表
本题需要定义两个指针在环里面以不同的速度前进,如果有环那肯定会相遇,没有环指针的next一定会为null,有环的时候,需要在他们的第一次相交的地方开始查找环的入口,此时定义两个指针,一个从链表头节点开始,一个从相交的地方开始,每次都走一步,它们一定会在入口节点相遇。两两交换链表中的节点这个题思路还是挺清晰的,代码写起来也很流畅,但是到了最后一步返回链表,我原来写的是返回head,结果缺少了头节点,可能因为创建了虚拟节点的问题,改成返回虚拟节点的next就AC了;删除链表的倒数第N个节点。
2025-04-13 18:42:05
443
原创 代码随想录算法训练营第3天| LeetCode 203.移除链表元素 707.设计链表 206.反转链表
移除链表元素解题思路:本体考点基本为链表的删除操作,注意第一个节点特殊处理。头节点的指针切记不要修改!.设计链表解题思路:首先定义链表节点的构造器,然后定义一个size记录链表长度,还有一个head虚拟头节点,链表的正式索引从0开始,但是在我自己写代码的时候get函数和delete函数中反复没有搞清楚循环体应该是什么,想了很久,不过其余操作还是理解指针就难度不大了。.反转链表。
2025-04-12 22:42:20
260
原创 代码随想录算法训练营第2天| LeetCode 209.长度最小的子数组 59.螺旋矩阵II
首先确定如何对两个指针进行移动操作,两个指针初始值均为0,然后移动右指针,并且每移动一次右指针,都将右指针的这个值添加到sum里面求和,当sum >= target的时候,更新sum的值(减去原始[left,right]里面的首个值)并且同时把左指针向后移动一位,循环往复。今日总结:①写的时候还是按照思路能把代码基本写完,但是第一次运行失败,然后就开始思考一些细节,发现细节的处理不太到位和对循环体这个东西还是有点模糊的;②代码控制力还是有点不够,得多看看循环的题。从leetcode上面看到的一个解法题解。
2025-04-11 20:21:37
471
原创 代码随想录算法训练营第1天
今天是算法跟练的第一天,虽然昨天已经开课落下了一天,但是我肯定会坚持下去赶上进度的;在写算法题的时候我先是看了视频思路讲解,然后自己按照思路写代码,写完之后检查逻辑层面上没有问题,但是仍然编译不通过,然后对比了代码随想录的代码,在做二分查找的时候发现最后返回的东西有点问题;在做移除元素的时候,最后返回数值我写错成了slow - 1(真是该死);在写有序数的平方的时候也是对于循环体没有搞太清楚。
2025-04-10 20:57:26
461
1
原创 Vuex简单的使用
createStore传入参数包括state, getters, mutations, Action, modules。可分别创建文件用于保存以上参数。在src下创建store文件夹用于存放store实例,在index.ts文件下写入。在commit('mutations')之后就可以使用此方法了。
2023-08-14 09:45:11
59
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅