- 博客(7)
- 收藏
- 关注
原创 CodeTop(50-53) 力扣题链接加Java代码加详解
动态规划解决,二维dp数组含义,dp(i)(j) 含义为[0, i-1]区间字符串1:s 和[0, j-1]区间的字符串2:t 的最长公共子序列的长度,区间到 i-1和 j-1 是为了初始化方便 即第一行和第一列都为0即可,根据含义可知,当s[i - 1] == t[j - 1]时dp(i)(j) = dp(i-1)(j-1) + 1,而当 s[i - 1]!注意循环不变量即可,如下方法为左闭右闭区间 [ ]
2025-12-10 23:12:31
919
原创 CodeTop(48-49) 力扣题链接加Java代码加详解
由方法一可知,窗口s覆盖t则是s中的字符出现次数大于等于t的所有字符出现次数,那么反过来想,窗口s中没有出现次数小于t中字符次数的字符,所以用一个变量less来记录窗口s中出现次数小于t中相对应字符的 字符个数,即s中有几个字符是小于t中出现次数的。双指针滑窗,两个数组来记录两个字符串中出现的各个字符的次数(也可HashMap记录字符次数),要求s覆盖t的最小字串,则让窗口s最小长度覆盖t,覆盖的情况即是:窗口s的各个字符出现的次数大于等于t中所有字符的次数。
2025-12-09 23:52:02
389
原创 CodeTop(46-47) 力扣题链接加Java代码加详解
使用栈来实现 ,遍历字符串,当遇到左括号时将左括号的索引位置入栈,而当遇到右括号时,判断此时栈是否为空并且栈顶元素是否为左括号,满足上述条件时,弹出栈顶元素(弹出的栈顶元素为与当前遇到的右括号相匹配的左括号),然后要判断此时的栈是否为空,如果是空的则说明到此右括号的位置为止都是有效括号,那么长度就为当前索引位置。而当其中一个数组的k/2 - 1的索引位置时越界了,则说明这个数组所有元素都可以删除了,则这时候找另一个数组的第k(更新完毕的k)小的元素即为我们所找的两个数组合并后的第k小的元素。
2025-12-08 23:48:26
1720
原创 CodeTop记录(43-45)力扣链接+java代码和详细解释
递归实现,寻找链表中间节点断开,左部分链表递归返回左边排好序的链表(递归到剩一个节点时直接返回该节点在中间进行合并),右部分链表递归返回右部分排好序的链表(递归到剩一个节点时直接返回该节点在中间进行合并),在中间再合并(有序链表合并)。降低空间复杂度为O(1),逆向思维从底向上合并,先将链表分成只有一个节点的子链表,然后合并成分别为两个有序的节点组成的链表,然后再分成两个节点组成的子链表,再合并成分别为四个有序节点组成的链表,再分再合依次类推,最后得到全有序的链表。考虑各种情况模拟做的。
2025-12-04 20:32:22
409
原创 CodeTop记录(38-42有对应力扣题目链接)
使用栈实现,遍历字符串遇到各种左括号形式就将其对应的右括号形式加入栈中,一旦遇到右括号形式时就将其与栈顶元素进行比较,如果不同则说明匹配失败返回false,如果相同说明匹配成功,将栈顶弹出继续往后遍历比对,栈提前空了也不行说明右括号多了,最后遍历结束正好栈空了说明是有效信号,遍历完了栈没空说明左括号多了也不行。递归实现,注意实现方法,来确定有无回溯,生成方法当左括号数量小于n时可以生成,右括号生成条件为右括号数量小于左括号数量时才可以生成右括号,如果右括号数量先比左括号多了一定是无效的例如:( ))
2025-12-03 20:21:02
831
原创 CodeTop(后端35-37)
层序遍历解决 即当遍历到每层的最后一个节点时保存节点到结果 即当每层的队列中的最后一个节点弹出时保存。双指针模拟加法运算 分别从两个字符串尾部 即个位开始 还需要一个变量用来记录进位。回溯算法解决的 分割问题 (组合问题的变招)
2025-12-02 21:55:55
204
原创 CodeTop做题记录
双指针法判断是否相交两个指针一起走pA走完A了就开始从headB开始接着走 pB走完B了就开始从headA接着走相交情况 A的前半段为a B的前半段为b 相交后的重合部分为cab相等 则会同时到达一个相交的节点处ab不等 则会pA走完a+c在走完b pB会走完b+c再走完a 即他俩都走了a+b+c 这么远后在相交节点相遇了不相交情况A的总长m和B总长nm和n相等 pA pB同时走到空mn不等 pA走完A再走完B pB走完B再走A pA pB都走完m+n同时为空 结束。
2025-12-01 20:09:39
1023
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅