- 博客(7)
- 收藏
- 关注
原创 回溯问题之全排列
本文介绍了回溯算法的基本概念及其在全排列问题中的应用。回溯可视为DFS的升级版,通过"撤回上一状态"来穷举所有可能解。针对全排列问题,重点讲解了剪枝优化策略(树层去重)和状态变量设计(used数组)。文章以LCR084和LCR157为例,详细分析了字符排列和数字排列的处理方法,包括排序预处理、交换法和used标记法的实现差异。特别指出字符串排列中通过交换位置和HashSet去重的技巧,同时承认回溯算法的抽象性,欢迎读者讨论补充理解难点。整体强调回溯=递归+状态撤销+剪枝的核心思想。
2025-09-22 09:42:29
820
原创 138. 复制带随机指针的链表
题目要求对包含随机指针的链表进行深拷贝。关键点在于正确处理随机指针的指向关系。提出了两种解决方案:1)使用哈希表存储新旧节点映射,通过遍历原链表建立新节点的next和random指向;2)采用拼接拆分法,在原节点后插入新节点,通过位置关系设置random指针,最后拆分两个链表。两种方法时间复杂度均为O(n),空间复杂度哈希表法为O(n),拼接法为O(1)。
2025-09-22 09:41:06
1165
原创 LCR 184. 设计自助结算系统(双向队列)
摘要:本文设计了一个高效的自助结账系统,通过主队列+辅助双端队列实现O(1)时间复杂度的max操作。核心方案是:入队时维护递减双端队列(移除尾部小于新值的元素),出队时若移除当前最大值则同步移除双端队列首部元素。类似地,文中还给出了最小栈的实现方案,通过辅助栈存储非严格递减元素。两种方案均采用"空间换时间"策略,在保证主要操作效率的同时,实现了极值查询的O(1)时间复杂度。关键点在于维护辅助数据结构与主数据结构的同步更新机制。
2025-09-22 09:38:39
833
原创 LCR 124. 推理二叉树
由于栈是先进后出,前序是根左右,那么栈在访问子节点的时候就需要先右后左,如下图因为A左右节点不为空所以放入了C和B,B出去后,由于B先出去导致先判断B的左右子节点,C被卡在了下面,等到下一步又是先访问的左边的D,因为D先出去了,E被堆在C上方,又要访问D的左右节点,这样使得优先出去的一直是左节点,也就是先把左边的树给插入完了,再往右边看,类似DFS。想要构建一棵树光知道根节点是不够的还要知道每一步的左子树的根节点以及右子树的根节点,那怎么得到了,是从前序得到还是中序得到了?递归(以前序递归为例)
2025-09-22 09:36:44
887
原创 LCR 130. 衣橱整理(BFS和DFS)
家居整理师将待整理衣橱划分为m x n的二维矩阵grid,其中grid[i][j]代表一个需要整理的格子。整理师自grid[0][0]开始地整理每个格子。整理规则为:在整理过程中,可以选择或,但不能移动到衣柜之外。同时,不需要整理的格子,其中digit(x)表示数字x的各数位之和。请返回整理师。
2025-09-22 09:35:02
764
原创 简易连连看
给定一个2N×2N的方阵网格游戏盘面,每个格子中放置一些符号。程序读入玩家给出的一对位置(x1,y1)、(x2,y2),判断这两个位置上的符号是否匹配。若匹配错误达到3次,则输出“Game Over”并结束游戏。随后2N行,每行2N个大写英文字母(其间以1个空格分隔),表示游戏盘面。盘面之后给出一个正整数K,随后K行,每行按照格式“x1 y1 x2 y2”给出一个玩家的输入。根据玩家的每一步输入,输出相应的结果。输出盘面时注意,每行字符间以1个空格分隔,行末不得有多余空格。...
2022-09-01 17:36:20
280
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅