- 博客(89)
- 收藏
- 关注
原创 堆-前K个高频元素
然后使用一个长度为K的最小堆,每次都将新的元素与堆顶元素进行比较(堆中频率最小的元素),如果新的元素的频率比堆顶端的元素大,则弹出堆顶端的元素,将新的元素添加进堆中,最后堆中的k个元素即为前k个高频元素。
2025-04-01 19:04:25
102
原创 栈-最小栈
使用双端队列来实现,并且使用一个minStack进行维护最小值,每次push一次,minStack维护一次最小值,pop一次,同样的minStack也pop一次,xStack和minStack中元素数量一致、
2025-03-27 21:03:43
176
原创 栈-有效的括号
我们可以看到Satck的功能基本上已经满足我们的要求了,可是在文档上依然推荐我们使用Deque双端队列的实现类来完成Satck的功能,这是因为java中Stack类设计的有一些问题,因为我们可以看到Satck是继承自 Vector,但是依照程序设计的一个原则多组合少继承来看,这个设计是不合理的,应该是Vector组成Satck比较好,然后java的官方也发现了这个问题,但是后面想更改的时候时间就比较晚了,所以才在文档里面建议我们使用双端队列来模拟栈比较好。细节在于将右括号入栈。
2025-03-27 19:50:58
319
原创 二分查找-寻找旋转排序数组中的最小值
作为while循环的条件呢?因为在第一个if判断中,right赋值为mid,当最后left,mid,right全都相等时,会陷入死循环,所以此处使用。使用搜索旋转排序数组的方法,会漏掉一种情况,如下代码。所以在进行比较时使用。
2025-03-25 17:40:42
130
原创 二分查找-在排序数组中查找元素的第一个和最后一个位置
非递减数组,可以实现一个方法,找到每一个目标值的最左边索引,然后target+1起始索引的前一位就是最右边索引。:整型数组,存储开始位置和结束索引。:整型数组,目标整型变量。
2025-03-21 22:34:38
266
原创 回溯-单词搜索
搜索下一单元格: 朝当前元素的 上、下、左、右 四个方向开启下层递归,使用 或 连接 (代表只需找到一条可行路径就直接返回,不再做后续 DFS ),并记录结果至 res。返回 false : (1) 行或列索引越界 或 (2) 当前矩阵元素与目标字符不同 或 (3) 当前矩阵元素已访问过 ( (3) 可合并至 (2) )。标记当前矩阵元素: 将 board[i][j] 修改为 空字符‘\0’ ,代表此元素已访问过,防止之后搜索时重复访问。:遍历字符数组,下上右左递归回溯。:二维字符数组,给定字符串。
2025-03-21 21:30:19
309
原创 回溯-括号生成
使用回溯法,先append左括号,然后再append右括号,当左括号数量小于n时append,然后递归加回溯,右括号也同理。此题在解的时候考虑到了回溯,但是关于在哪里递归和回溯没有搞明白,还有。
2025-03-21 18:40:32
201
原创 回溯-组合总和
表示当前在 candidates 数组的第 idx 位,还剩 target 要组合,已经组合的列表为 combine。递归的终止条件为 target≤0 或者 candidates 数组被全部用完。那么在当前的函数中,每次可以选择跳过不用第 idx 个数,即执行。,注意到每个数字可以被无限制重复选取,因此搜索的下标仍为 idx。也可以选择使用第 idx 个数,即执行。:此题目可以优化,进行剪枝操作。
2025-03-20 21:11:09
206
原创 二分查找-搜索二维矩阵
一次二分查找,将二维数组看成是一个一维数组,然后进行二分查找。二分查找的头为0,尾为数组的元素个数,中间值使用。注意在while循环中。
2025-03-17 20:09:39
226
原创 二叉树-从前序和中序中遍历序列构造二叉树
将中序遍历的结果存入哈希表中,然后通过前序遍历知道二叉树的根结点,然后递归。:二叉树的前序和中序遍历,两个整型数组。
2025-03-17 17:55:42
151
原创 实习笔试-01字符转换小写字母
然后定义一个数组来存储0、1的当前索引。,进行StringBuilder拼接,使用StringBuilder来操作。,取出当前数字字符对应的小写字母链表。:01字符串,这里使用String。然后将当前字符指向下一个小写字符。,然后得到链表中的小写字符。
2025-03-14 21:51:59
247
原创 回溯-子集
在向result中添加新的元素时,应该创建一个副本,将tmpList传入,而不是直接加入tmpList,这样后续对tmpList的修改会影响result中的值,会使结果全部一样。:利用二进制,(比如说数组长度为3)000、001、010、011、100、101、110、111刚好可以遍历所有情况。20225.03.17二刷,使用回溯。但是关于此类问题,主要考察回溯的算法。
2025-03-10 17:32:41
248
原创 二叉树-二叉树的右视图
使用层序遍历,建立二元列表,每一层列表的最后一个元素即为最右边的结点。然后本题也就是使用层序遍历,并返回每一层最后一个结点。
2025-03-09 17:10:07
368
原创 图论-实现Trie(前缀树)
每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符。子节点代表的字符串是由节点本身的原始字符串,以及通往该子节点路径上所有的字符组成的。示例:插入"apple"时,会依次创建a→p→p→l→e的路径,并在e节点设置isEnd=true。示例:搜索"apple"时,若路径存在且e节点的isEnd=true,返回true。对每个字符计算索引(如ch - ‘a’),若对应子节点不存在则创建新节点。遍历结束后,将最后一个节点的isEnd设为true,标记单词结束。若中途遇到子节点不存在,返回null。
2025-03-08 18:28:50
434
原创 二叉树-二叉搜索树中第K小的元素
加入此行代码的原因是当遍历到第k个元素时,可以停止遍历,不用再加入其他的结点。:使用中序遍历,遍历到的第k个数就是第k小的元素。
2025-03-08 17:04:12
210
原创 图论-课程表
看题解之后知道此题属于【拓扑排序】问题,判断安排图是否是有向无环图,使用入度表,借助一个队列queue,将所有的入度为0的节点入队,然后当queue非空时,依次出队,将此结点对应的所有邻接结点的入度-1,当邻接结点的入度为0,则入队,出队时进行–操作,判断课程数是否等于零,判断是否成功。:课程数和先修课程数组。
2025-03-06 20:19:20
407
原创 二叉树-验证二叉搜索树
注意此题目每次在递归的时候,使用的都是一个结点在进行比较,而不是直接比较他的左右儿子,所有在比较头结点时,需要定义长整型Long的最大最小值,但是这个题目的Integer的范围不给过。
2025-03-06 17:53:35
165
原创 链表-K个一组翻转链表
参考翻转链表,然后使用链表的长度除以要每次翻转的结点数,控制while循环次数,然后在for循环中翻转链表,关键在于怎么求链表的长度,再遍历一遍链表求值?特殊情况,当翻转部分长度不足 k 时,在定位 end 完成后,end==null,已经到达末尾,说明题目已完成,直接返回即可。初始需要两个变量 pre 和 end,pre 代表待翻转链表的前驱,end 代表待翻转链表的末尾。翻转链表,然后将三部分链表连接起来,然后重置 pre 和 end 指针,然后进入下一次循环。:链表,和每次要反转的结点数。
2025-03-04 18:02:57
162
原创 链表-合并两个有序链表
注意:这里定义了一个哑节点,result1,哑节点的 next 指针始终指向合并后链表的头节点。这样做可以避免处理头节点为空的特殊情况,简化代码逻辑。:迭代,判断两个节点的值的大小,谁小先连谁,然后移动谁,最后把剩下的移动到整合一半的节点后面。:合并后链表的头节点。
2025-02-27 02:29:55
152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人