- 博客(63)
- 收藏
- 关注
原创 41-算法打卡-二叉树-深度优先(前、中、后序遍历)-迭代遍历-第四十一天
然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。所以我们可以用栈来实现二叉树的前中后序遍历。
2025-05-12 17:52:09
942
原创 40-算法打卡-二叉树-深度优先(前、中、后序遍历)-递归遍历-第四十天
确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。
2025-05-09 17:31:01
1086
原创 38-算法打卡-栈与队列-前 K 个高频元素-leetcode(347)-第三十八天
347. 前 K 个高频元素 - 力扣(LeetCode)347. 前 K 个高频元素 - 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
2025-05-09 09:57:17
890
原创 37-算法打卡-栈与队列-滑动窗口最大值-leetcode(239)-第三十七天
239. 滑动窗口最大值 - 力扣(LeetCode)239. 滑动窗口最大值 - 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。
2025-05-06 10:11:55
1039
原创 36-算法打卡-栈与队列-逆波兰表达式求值-leetcode(150)-第三十六天
150. 逆波兰表达式求值 - 力扣(LeetCode)150. 逆波兰表达式求值 - 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 [https://baike.baidu.com/item/%E9%80%86%E6%B3%A2%E5%85%B0%E5%BC%8F/128437] 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意: * 有效的算符为 '+'、'-'、'*' 和 '/'。* 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
2025-04-30 10:00:05
679
原创 35-算法打卡-栈与队列-删除字符串中的所有相邻重复项-leetcode(1047)-第三十五天
1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)1047. 删除字符串中的所有相邻重复项 - 给出由小写字母组成的字符串 s,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 s 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。
2025-04-29 10:39:39
1074
原创 34-算法打卡-栈与队列-有效的括号-leetcode(20)-第三十四天
20. 有效的括号 - 力扣(LeetCode)20. 有效的括号 - 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足: 1. 左括号必须用相同类型的右括号闭合。2. 左括号必须以正确的顺序闭合。3. 每个右括号都有一个对应的相同类型的左括号。
2025-04-29 10:23:09
884
原创 33-算法打卡-栈与队列-用队列实现栈-leetcode(225)-第三十三天
225. 用队列实现栈 - 力扣(LeetCode)225. 用队列实现栈 - 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类: * void push(int x) 将元素 x 压入栈顶。* int pop() 移除并返回栈顶元素。* int top() 返回栈顶元素。* boolean empty() 如果栈是空的,返回 true;否则,返回 false。
2025-04-29 09:21:47
567
原创 32-算法打卡-栈与队列-用栈实现队列-leetcode(232)-第三十二天
232. 用栈实现队列 - 力扣(LeetCode)232. 用栈实现队列 - 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类: * void push(int x) 将元素 x 推到队列的末尾 * int pop() 从队列的开头移除并返回元素 * int peek() 返回队列开头的元素 * boolean empty() 如果队列为空,返回 true;
2025-04-28 10:17:07
1027
原创 31-算法打卡-栈对队列的基本概念-第三十一天
堆栈又名栈(),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。模拟进栈 、出栈的流程演示(先进后出)
2025-04-27 22:35:31
288
原创 00-算法打卡-目录
01-算法打卡-数组-二分查找-leetcode(704)-第一天-CSDN博客02-算法打卡-数组-二分查找-leetcode(35)-第二天-CSDN博客03-算法打卡-数组-二分查找-leetcode(34)-第三天_leetcode 34-CSDN博客04-算法打卡-数组-二分查找-leetcode(69)-第四天-CSDN博客05-算法打卡-数组-二分查找-leetcode(367)-第五天-CSDN博客06-算法打卡-链表基本概念-第六天-CSDN博客07-算法打卡-链表-移除链表-l
2025-04-27 21:50:40
601
原创 30-算法打卡-字符串-重复的子字符串-leetcode(459)-第三十天
459. 重复的子字符串 - 力扣(LeetCode)459. 重复的子字符串 - 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。示例 1:输入: s = "abab"输出: true解释: 可由子串 "ab" 重复两次构成。示例 2:输入: s = "aba"输出: false示例 3:输入: s = "abcabcabcabc"输出: true解释: 可由子串 "abc" 重复四次构成。(或子串 "abcabc" 重复两次构成。
2025-04-27 16:18:07
815
原创 28-算法打卡-字符串-KMP算法理论-第二十八天
KMP算法是,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。KMP算法在每次匹配过程中发生某次失配时,不再单纯地把模式后移一位,而是根据当前字符的特征数来决定模式右移的位数,进而减少匹配的次数。
2025-04-25 12:02:49
977
原创 27-算法打卡-字符串-找出字符串中第一个匹配项的下标-leetcode(28)-第二十七天
28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)28. 找出字符串中第一个匹配项的下标 - 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1。示例 1:输入:haystack = "sadbutsad", needle = "sad"输出:0解释:"sad" 在下标 0 和 6 处匹配。
2025-04-24 10:26:53
1405
原创 26-算法打卡-字符串-右旋字符串-第二十六天
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。输出:输出共一行,为进行了右旋转操作后的字符串。
2025-04-23 11:35:50
356
原创 25-算法打卡-字符串-反转字符串里的单词-leetcode(151)-第二十五天
151. 反转字符串中的单词 - 力扣(LeetCode)151. 反转字符串中的单词 - 给你一个字符串 s ,请你反转字符串中 单词 的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
2025-04-23 10:28:06
669
原创 24-算法打卡-字符串-反转字符串II-leetcode(541)-第二十四天
541. 反转字符串 II - 力扣(LeetCode)541. 反转字符串 II - 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。* 如果剩余字符少于 k 个,则将剩余字符全部反转。* 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
2025-04-22 11:27:17
931
原创 22-算法打卡-哈希表-四数之和-leetcode(18)-第二十二天
18. 四数之和 - 力扣(LeetCode)18. 四数之和 - 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target。
2025-04-21 13:47:55
860
原创 21-算法打卡-哈希表-三数之和-leetcode(15)-第二十一天
15. 三数之和 - 力扣(LeetCode)15. 三数之和 - 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= j、i!= k 且 j!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。
2025-04-21 10:34:51
1150
原创 20-算法打卡-哈希表-赎金信-leetcode(383)-第二十天
383. 赎金信 - 力扣(LeetCode)383. 赎金信 - 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true;否则返回 false。magazine 中的每个字符只能在 ransomNote 中使用一次。
2025-04-19 11:43:43
777
原创 18-算法打卡-哈希表-两数之和-leetcode(1)-第十八天
1. 两数之和 - 力扣(LeetCode)1. 两数之和 - 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。
2025-04-18 10:07:08
811
原创 17-算法打卡-哈希表-快乐数-leetcode(202)-第十七天
202. 快乐数 - 力扣(LeetCode)202. 快乐数 - 编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为: * 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。* 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。* 如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true;不是,则返回 false。
2025-04-18 10:06:47
761
原创 16-算法打卡-哈希表-两个数组的交集-leetcode(349)-第十六天
349. 两个数组的交集 - 力扣(LeetCode)349. 两个数组的交集 - 给定两个数组 nums1 和 nums2 ,返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序。
2025-04-17 22:59:22
1074
原创 15-算法打卡-哈希表-有效的字母异位词-leetcode(242)-第十五天
242. 有效的字母异位词 - 力扣(LeetCode)242. 有效的字母异位词 - 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false 提示: * 1 <= s.length, t.length <= 5 * 104 * s 和 t 仅包含小写字母 进阶: 如果输入字符串包含 unicode 字符怎么办?
2025-04-17 14:51:19
772
原创 14-算法打卡-哈希表-基本概念-第十四天
在Java中使用hash实现的常见的数据结构HashSet、HashMap、HashTable;当我们遇到了要快速判断一个元素是否出现在集合里的时候,就要考虑哈希法。
2025-04-17 11:14:54
880
原创 13-算法打卡-链表-环形链表II-leetcode(142)-第十三天
142. 环形链表 II - 力扣(LeetCode)142. 环形链表 II - 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。
2025-04-16 20:27:29
1093
原创 12-算法打卡-链表-链表相交-leetcode(面试题02.07)-第十二天
面试题 02.07. 链表相交 - 力扣(LeetCode)面试题 02.07. 链表相交 - 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null。
2025-04-16 20:26:57
1033
原创 11-算法打卡-链表-删除链表的倒数第N个节点-leetcode(19)-第十一天
19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)19. 删除链表的倒数第 N 个结点 - 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
2025-04-15 10:51:18
1106
原创 10-算法打卡-链表-两两交换链表中的节点-leetcode(24)-第十天
24. 两两交换链表中的节点 - 力扣(LeetCode)24. 两两交换链表中的节点 - 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2025-04-15 10:50:56
1199
原创 08-算法打卡-链表-设计链表-leetcode(707)-第八天
707. 设计链表 - 力扣(LeetCode)707. 设计链表 - 你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 开始。实现 MyLinkedList 类: * MyLinkedList() 初始化 MyLinkedList 对象。
2025-04-14 16:51:42
933
原创 09-算法打卡-链表-反转链表-leetcode(206)-第九天
206. 反转链表 - 力扣(LeetCode)206. 反转链表 - 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
2025-04-14 16:51:19
1427
原创 07-算法打卡-链表-移除链表-leetcode(203)-第七天
203. 移除链表元素 - 力扣(LeetCode)203. 移除链表元素 - 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。
2025-04-13 19:53:24
1246
原创 05-算法打卡-数组-二分查找-leetcode(367)-第五天
367. 有效的完全平方数 - 力扣(LeetCode)367. 有效的完全平方数 - 给你一个正整数 num。如果 num 是一个完全平方数,则返回 true ,否则返回 false。完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。不能使用任何内置的库函数,如 sqrt。示例 1:输入:num = 16输出:true解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。
2025-04-13 19:52:26
906
原创 04-算法打卡-数组-二分查找-leetcode(69)-第四天
69. x 的平方根 - 力扣(LeetCode)69. x 的平方根 - 给你一个非负整数 x ,计算并返回 x 的 算术平方根。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5。示例 1:输入:x = 4输出:2示例 2:输入:x = 8输出:2解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。提示: * 0 <= x <= 231 - 1。
2025-04-12 21:55:15
888
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人