自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 代码随想录算法训练营第25天|134. 加油站、135. 分发糖果、860. 柠檬水找零

如果遇见了当前遍历孩子的评分比上一个孩子的评分低的情况,然而上个孩子的糖果是1个,那么要向前,找到评分不大于前一个孩子评分的孩子,中间的糖果数量都加1。如果当前孩子不能发一个糖果,那么在遍历过程中,肯定是因为前一个孩子的评分低于了当前遍历到的孩子评分。从前向后遍历评分数组,对每个孩子尽可能都发1个糖果。那么这时,这个孩子就要发比前一个孩子多一个的糖果。如果要找零时,尽可能从大数额的零钱开始给。先从左到右处理右边分数更高的情况。再从右向左处理左边分数更高的情况。将问题分成两个维度处理。

2024-07-09 07:24:15 141

原创 代码随想录算法训练营第24天|122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II

贪心算法也可以用动态规划贪心算法的做法:从前向后遍历,当当前价格低于手中持有的股票价格时,就将手中持有的股票变为当前股票当遇见当前价格高于手中的股票价格时,就卖出股票,结算收益,同时手中再持有当前股票贪心算法每一步都尽量跳到下一步能跳的更远的位置。

2024-07-08 21:03:17 269

原创 代码随想录算法训练营第23天|455. 分发饼干、376. 摆动序列、53. 最大子数组和

遍历nums数组,用一个和curSum代表当前连续子数组的和,当curSum <= 0时,开启新的连续子数组。从前向后遍历,记录下上个差值,当当前遍历的差值与上个差值同正负时,判断哪个差值绝对值更大,就取哪个序列。先对两个数组进行排序,双指针分别从后向前遍历,当s[j]能满足g[i]时,i--,j--当当前遍历的差值与上个差值不同正负时,将当前遍历的值加入序列中,长度加一。使用双指针,尽可能用大的饼干满足大胃口值的孩子。s[j]不能满足g[i]时,i--每一次遍历更新一次最大和。

2024-07-07 22:44:54 317

原创 代码随想录算法训练营第22天|491. 非递减子序列、46. 全排列、47. 全排列 II

每层递归中,从当前开始遍历的数组索引开始遍历数组,当当前遍历元素大于等于item中最后一个元素时,将该元素加入item集合。每层递归中,从0开始遍历数组,将遍历的元素加入单枝集合item中,同时用一个boolean数组标志数字是否已经加入集合。每层递归中,从0开始遍历数组,将遍历的元素加入单枝集合item中,同时用一个boolean数组标志数字是否已经加入集合。返回值为void,参数为给定数组nums,不需要当前开始遍历的数组索引。返回值为void,参数为给定数组nums,和当前开始遍历的数组索引。

2024-07-07 21:55:15 307

原创 代码随想录算法训练营第21天|93. 复原 IP 地址、78. 子集、90. 子集 II

去重之前要先对candidates数组进行排序回溯三部曲1.确定回溯函数返回值和参数返回值为void,参数为给定原字符串s,和当前开始遍历的字符串字符下标2.确定回溯终止条件当遍历开始下标超出字符串长度时,中止递归3.确定回溯单层过程从当前层开始位置开始向后遍历,判断[start,end]的子串是否是ip地址的合法组成,是的话,加入过程集合,进入下一层递归层。若不是,直接break退出本层递归记得回溯剪枝:ip段的长度最大是3,因此在每层中向后遍历的次数应该小于3。

2024-07-01 21:23:22 386

原创 代码随想录算法训练营第20天|39. 组合总和、40. 组合总和 II、131. 分割回文串

回溯三部曲1.确定回溯函数返回值和参数返回值为void,参数为给定数组candidates,目标值target,和当前开始遍历的数组下标?2.确定回溯终止条件当前和大于目标值,直接中止此次回溯。或当相加的数字之和等于目标值target,将目标集合加入结果集,中止此次回溯。3.确定回溯单层过程从当前开始遍历的数组下标开始遍历剩余的数组元素,将遍历到的元素加到和上,进入下一个递归层。递归出来之后进行回溯,减去当前遍历到的元素值能否有剪枝操作?

2024-07-01 21:16:42 862

原创 代码随想录算法训练营第19天|77. 组合、216. 组合总和 III、17. 电话号码的字母组合

回溯三部曲1. 确定回溯函数的返回值和参数本题中返回结果为一个List,回溯函数肯定不能返回List,返回值为void即可参数为n和k2. 确定递归中止条件找到k个数字的集合就中止本次回溯3. 确定单层递归操作每层递归函数内,从当前位置向后遍历数字,将数字加入过程集合,进入下一层,之后回溯。

2024-07-01 20:36:16 279

原创 代码随想录算法训练营第18天|669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树

从根节点向下遍历二叉搜索树,找到不是[low,high]范围内的节点就删除节点。要转换为一棵 平衡 二叉搜索树,需要根节点的左右子树的最大深度差不超过1。记录上个遍历的节点的值,当前节点的值改为当前节点的值加上上一个节点的值。那么就将nums数组平分为两组,分别组成左右子树。

2024-06-26 19:49:47 210

原创 代码随想录算法训练营第17天|235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点

如果key节点的左孩子不为空,找到key节点的左子树的最靠右节点(最大值),将此节点作为新的树的根节点,替代key节点。从上到下搜索二叉搜索树,第一个找到val在p和q之间的就是p和q的最近公共祖先。本题是二叉搜索树,如何利用二叉搜索树的特性来做这道题。只将新节点插入在空的位置,这样不涉及到树结构的改变。如果key节点的左孩子为空,返回右孩子即可。普通二叉树找最近公共祖先用后序遍历。找到了要删除的节点,进行删除。

2024-06-26 17:37:22 301

原创 代码随想录算法训练营第16天|530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先

每遍历一个节点,判断一下count和以前记录的最大次数nowMaxCount的大小,若count更大,则将结果集合中的所有元素移除,并将上一个节点的元素加入集合。中序遍历,使用一个count记录节点值的出现次数,当当前节点和上一个节点的值相等时,count+1,否则count重置为1。最直观的做法,就是中序遍历二叉搜索树,最小差值一定出现在中序遍历序列的相邻元素之间。若nowMaxCount更大,不做操作。若一样大,则将上一个节点的值加入集合。自己思考的版本,逻辑有点混乱。

2024-06-24 19:38:33 311

原创 代码随想录算法训练营第15天|654. 最大二叉树、617.合并二叉树 、700.二叉搜索树中的搜索 、98.验证二叉搜索树

和106构造二叉树是一个写法。

2024-06-23 17:46:09 130

原创 代码随想录算法训练营第14天|513. 找树左下角的值、112. 路径总和、106. 从中序与后序遍历序列构造二叉树

【代码】代码随想录算法训练营第14天|513. 找树左下角的值、112. 路径总和。

2024-06-23 16:59:20 148

原创 代码随想录算法训练营第13天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

然后确定如果用递归法,返回值和参数是什么 不需要返回值,参数为节点TreeNode root,以及当前的路径字符串长度,便于回溯删除多余的路径。//若以该节点为根节点的子树是满二叉树,设该子树的深度为n,返回2 * n - 1;//若以该节点为根节点的子树不是满二叉树,返回该节点的左右子树的节点和 + 1;用后序遍历的写法,求出左右子树中的左叶子和,再判断当前节点的左孩子是否是左叶子节点即可。//递归遍历是后序遍历,返回值是以该节点为根节点的子树的节点数量。要求节点的高度,因此使用后序遍历。

2024-06-21 17:26:27 238

原创 代码随想录算法训练营第12天|​226. 翻转二叉树​、101. 对称二叉树、104. 二叉树的最大深度、111. 二叉树的最小深度

要理清楚在遍历过程中,左右节点是否存在的情况:都不存在,有一个存在,都存在,都不存在是对称的,一个不存在是不对称的,都存在就判断val是否相同。但这个想法是错的,其实先求出左右子树的最小深度的思路没问题,主要是递归中止条件的判断,104是当前节点为null,即最大深度为0,第一个想法是参考104 二叉树的最大深度 的后序遍历的方法,先求出左右子树的最小深度,加一即为当前节点的最小深度。中序遍历的顺序是左中右,翻转了左节点的枝后,翻转根节点,再翻转右节点时,右节点其实是已经翻转过的左节点。

2024-06-20 08:45:33 373

原创 代码随想录算法训练营第11天|二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代遍历、二叉树的层序遍历

二叉树的前中后序递归遍历。

2024-06-18 18:38:11 265

原创 代码随想录算法训练营第10天|150. 逆波兰表达式求值、239. 滑动窗口最大值、347. 前 K 个高频元素

用栈做,遍历tokens,将数字转为Integer类型依次入栈。每遇见一个符号,从栈顶取出两个,进行运算后将结果入栈,最后栈顶元素即为所求单调队列,一个双端队列。单调队列的队首元素始终为最大值。遍历元素并加入队列的过程:先构建第一个窗口的单调队列。之后每向后移动一次窗口,就将新加入窗口的元素加入队列中。在加入队列时,当队尾元素小于要加入的新元素时(while),就将队尾元素出队,最后将新元素加入队尾。在每次移动窗口后,若队首元素在窗口外了,需要将队首元素出队(while)。

2024-06-17 15:39:48 285

原创 代码随想录算法训练营第9天|232. 用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项

两个栈,一个做输入栈,一个做输出栈,pop、peek方法从输出栈取元素,push向输入栈推元素可以用一个队列实现,也可以用两个队列实现。

2024-06-17 15:34:11 158

原创 代码随想录算法训练营第8天|151. 反转字符串中的单词、卡码网:55.右旋转字符串、28. 实现 strStr() 、459.重复的子字符串

KMP算法,注意前缀表以及next数组的计算方式,next数组可以是前缀表减一,也可以就是前缀表,前缀表减一的方式好操作,但是个人感觉next数组就是前缀表的方式好理解。使用双指针,寻找单词,然后反转双指针之间的单词。

2024-06-15 21:01:37 313

原创 代码随想录算法训练营第7天|344. 反转字符串、541. 反转字符串 II、卡码网54. 替换数字

头尾指针前后交换。

2024-06-13 20:56:33 316

原创 代码随想录算法训练营第7天|454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数之和

时间复杂度O(n^2)。先遍历nums1和nums2,将和加入map中,key为和的值,value为和出现的频率,之后再遍历nums3和nums4,向map中寻找是否有0 - nums4[i] - nums[j],如果有,结果加上0 - nums4[i] - nums[j]的频率。先遍历magazine,统计每个字符的出现频率再遍历ransomNote,减去统计的magazine中的频率,若有频率小于-1,就直接返回false。本题时间复杂度需要达到O(n²)和15.三数之和类似。时间复杂度O(n³)

2024-06-13 20:49:00 188

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

最后判断数组是否全部为0,如果不是,返回false,如果是,返回true。然后遍历数组2,向存储数组中查询是否有遍历到的元素,如果有,加入返回结果集合中,并从存储数组中移除(防止重复加入结果)遍历数组nums,使用Map存储遍历到的数字和下标,key是数字,value是下标。然后遍历数组2,向set中查询是否有遍历到的元素,如果有,加入返回结果集合中,并从set中移除(防止重复加入结果)使用set收集每次变化后的数字,如果某一次变化后的数字已经在set中了,那么就不是快乐数,返回false。

2024-06-11 20:43:49 264

原创 代码随想录算法训练营第4天 | 24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07.链表相交、142.环形链表II

本题有迭代和递归两种做法。

2024-06-09 18:13:06 200

原创 代码随想录算法训练营第3天|leetcode 203.移除链表元素、leetcode 707.设计链表、leetcode 206.反转链表

每一次对节点的操作是将第二个节点指向第一个节点。在对节点进行操作前,先记录下第二个节点的next,在操作后方便移动节点。本题主要是注意使用虚拟头节点/虚拟尾节点(下次一定),可以方便统一操作。链表要有size属性。注意应用虚拟头节点,便于对头节点进行统一的操作。

2024-06-08 19:11:33 172

原创 代码随想录算法训练营第2天|leetcode 977.有序数组的平方、leetcode 209.长度最小的子数组、leetcode59.螺旋矩阵II

977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II。

2024-06-06 23:44:22 373

原创 代码随想录算法训练营第1天|leetcode 704. 二分查找、leetcode 27. 移除元素

本题思路为二分查找,主要注意区间问题,是左闭右开还是左闭右闭,针对不同的区间定义,对循环的结束条件和每一步的处理是不同的。本题思路为快慢指针,快指针用来搜索不等于目标数值的元素,慢指针用来接收结果。

2024-06-05 21:23:31 284

原创 SpringBoot中集成Mybatis配置数据库连接的若干问题

即3.0版本只支持SpringBoot3及JDK17,所以最开始创建SpringBoot工程不小心创建成了SpringBoot3版本的,在依赖选择时选择了Mybatis Framework,自动引入的是3.0.2版本的mybatis-spring-boot-starter,后续手动修改了SpringBoot版本为2.7.16,但是没有修改mybatis-spring-boot-starter的版本为2.3之前,因此运行测试就报了错。1)使用mysql-connector-j引入最新版本的驱动包。

2023-10-18 19:51:50 393 2

原创 成员内部类的动态绑定

今天突然想到对于成员内部类来说,访问修饰符是正常的四种,那么有关成员内部类的动态绑定和访问修饰符是否有关呢?我原以为subList(int fromIndex, int toIndex)方法返回的依然是一个ArrayList对象,因此一直循环调用该方法,结果返回的是一个SubList对象,但查看源码后发现,循环调用subList方法是没有问题的,因为SubList类中也有该方法。经测试,私有的成员内部类是可以动态绑定成功的,即在外部用其父类或实现的接口接收时,直接调用方法没有问题。

2023-10-11 11:31:28 41

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除