- 博客(106)
- 收藏
- 关注
原创 子集问题(python)
使用深度优先搜索(DFS)生成所有子集的Python算法。通过递归遍历数组,每次递归时都将当前路径(子集)加入结果集,然后继续探索后续元素的组合。核心代码包括:1)定义结果列表res和当前路径path;2)dfs函数通过回溯法生成子集;3)主函数处理输入并调用子集生成函数。该算法的时间复杂度为O(2^n),能有效输出输入数组的所有可能子集。
2026-04-17 17:44:46
1
原创 复原IP地址(python)
通过深度优先搜索(DFS)算法递归地分割字符串,并使用isValid函数检查每个子段是否符合IP地址规范(0-255之间、无前导零、长度不超过3位)。当分割点达到3个时,程序会验证剩余部分是否合法,若合法则将结果加入列表。
2026-04-17 17:12:33
3
原创 组合总和2
采用深度优先搜索(DFS)结合回溯法,通过排序数组和使用标记数组used来实现树层去重,避免重复组合。关键点在于:当当前元素与前一个元素相同且前一个元素未被使用时,跳过该元素以保证组合唯一性。最终输出所有符合条件的数字组合字符串。
2026-04-17 11:39:33
3
原创 电话号码的字母组合(python)
通过深度优先搜索(DFS)递归生成数字字符串对应的所有字母组合。使用哈希表mp存储数字与字母的映射关系,通过dfs遍历每个数字对应的字母,构建所有可能的组合。
2026-04-17 11:04:39
3
原创 组合问题3(python)
代码通过递归实现DFS,维护当前路径path和当前和cursum,当路径长度等于k且和等于n时保存结果。算法通过回溯剪枝优化,避免不必要的递归。
2026-04-16 19:39:06
6
原创 回溯(python)
使用回溯算法生成1到n中长度为k的所有组合。主要步骤包括:1)定义dfs递归函数,当路径长度等于k时保存结果;2)遍历可能的起始点,选择当前数字后递归处理后续数字;3)通过回溯撤销选择。输入n和k后,程序会输出所有符合条件的数字组合。例如n=4,k=2时输出[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]。
2026-04-16 17:58:55
4
原创 动态规划——01背包、完全背包(python,二维DP)
摘要:本文介绍了01背包和完全背包问题的二维动态规划解法。01背包通过比较不选当前物品和选当前物品两种情况来构建dp数组,状态转移方程为dp[i][j]=max(dp[i-1][j], dp[i-1][j-v[i-1]]+price[i-1])。完全背包与01背包的区别在于可以重复选择物品,状态转移方程为dp[i][j]=max(dp[i-1][j], dp[i][j-v[i-1]]+price[i-1])。两种方法都使用二维数组存储中间结果,最终输出dp[m][n]作为最优解。
2026-04-10 21:24:35
10
原创 和为K的子数组出现了多少个
摘要:本文介绍了一种利用前缀和与哈希表统计子数组和为k的算法。通过维护前缀和字典记录各前缀和出现次数,在遍历数组时检查当前前缀和与k的差值是否存在于字典中,从而快速统计满足条件的子数组数量。算法时间复杂度为O(n),空间复杂度为O(n),适用于解决连续子数组求和问题。代码实现包括输入处理和核心逻辑两部分,通过初始化字典和遍历计算完成统计。
2026-04-10 18:06:19
10
原创 动态规划——01背包问题、完全背包(python、一维DP)
摘要:本文介绍了01背包和完全背包问题的动态规划解法。01背包问题中,物品只能选一次,采用从后往前遍历背包容量的方法,初始化为0(最大价值)或负无穷(恰好装满)。完全背包问题中物品可无限选,采用从前往后遍历。两种方法都通过状态转移方程dp[j] = max(dp[j], dp[j-w[i]]+val[i])求解,其中w[i]和val[i]分别表示物品重量和价值。01背包的恰好装满问题需额外判断dp[k]是否为负无穷。
2026-04-09 18:29:32
27
原创 激活符文的最小水晶数量(python、贪心算法)
该摘要介绍了一个解决符文激活问题的算法思路。算法优先在符文右侧放置水晶,若右侧不可行则尝试左侧,若两者都不可行则判定任务失败。通过遍历数组,对每个符文位置进行判断和处理,最终输出所需水晶数量或失败结果(-1)。算法时间复杂度为O(n),适用于线性处理输入数组的场景。
2026-04-08 22:26:17
11
原创 接雨水——单调栈(python)
摘要:本文提出了一种使用单调栈解决接雨水问题的算法。通过维护一个存储下标的栈,当遇到比栈顶元素更高的墙时,说明形成了凹槽,可以计算接水量。算法弹出栈顶元素后,根据左右边界的最小高度差计算当前凹槽的接水量。时间复杂度为O(n),空间复杂度为O(n),能有效处理各种高度组合的雨水收集问题。
2026-04-08 20:36:43
15
原创 老鼠出动顺序(python、单调栈)
摘要:该算法使用单调栈处理数字序列,当遇到比栈顶小的元素时弹出栈顶元素,最后将剩余元素依次弹出。输入"1232345"经过处理后输出"3254321",实现了特定顺序的重排。核心思想是通过维护单调递增栈来控制元素的出栈顺序,最终将结果拼接为字符串输出。
2026-04-06 13:37:04
12
原创 执行任务剩余的最小执行机数量
摘要:该代码解决任务分配问题,通过统计执行机器数量来匹配任务需求。输入包含任务类型和机器类型,其中2号机器为万能机器。算法分两种情况处理(2号机器视为0或1),计算每种情况下剩余任务数,取最小值作为结果。函数f()统计机器数量并匹配任务,main()函数处理输入并输出最优解。最终输出能完成任务的最少剩余机器数。
2026-04-06 13:32:51
14
原创 数据分片(python)
本文介绍了一个数据分片统计程序,该程序将输入数据按指定大小分片后统计各分片的出现频次。程序使用元组保存数据分片,利用Counter类统计频次,最后输出分片内容及其出现次数。核心步骤包括:1)按给定大小k对数据进行分片;2)用Counter统计各分片频次;3)格式化输出结果。程序适用于分析数据中的重复模式,时间复杂度主要取决于分片和统计操作。
2026-04-06 13:04:25
12
原创 动态规划——买卖股票最佳时机
摘要:本文介绍了一个使用动态规划解决股票买卖问题的算法。通过定义dp数组表示前i天的最大利润,初始化最小价格minPrice为第一天的价格。遍历过程中更新minPrice为当前最低价,并计算当前价格与minPrice的差值来更新dp。该方法将空间复杂度优化为O(1)。代码实现包括输入处理和maxProfit函数,最终输出最大利润值。
2026-04-05 14:07:17
15
原创 回溯——子集(python)
摘要:本文展示了使用回溯算法生成数组所有子集的方法。通过树形结构分析,每个元素都有选与不选两种选择。核心代码实现递归遍历:在每一层递归中,先选择当前元素并继续递归,然后回溯不选该元素的情况继续递归。当遍历完所有元素时,将当前路径加入结果集。该方法通过path列表记录当前选择路径,最终输出所有可能的子集组合。
2026-04-04 17:19:49
27
原创 回溯——全排列(python)
本文介绍了使用深度优先搜索(DFS)实现全排列的算法。通过递归遍历所有可能路径,在到达最底层时收集结果,然后回溯继续搜索未访问的节点。关键点包括:使用visit数组标记已访问数字,递归后及时回溯恢复状态。算法从第0个位置开始填数,最终输出所有可能的排列组合。代码实现清晰展示了DFS回溯的核心思想,适用于解决类似的排列组合问题。
2026-04-04 16:46:24
22
原创 动态规划——打家劫舍(python)
该文介绍了一个动态规划解决"打家劫舍"问题的算法。定义dp[i]表示前i个房屋能偷取的最大价值,状态转移方程为dp[i] = max(dp[i-1], dp[i-2]+nums[i]),即当前房屋不偷或偷两种情况的最大值。初始化时处理前两个房屋的特殊情况,然后从第三个房屋开始递推计算,最终返回整个数组的最大值。算法时间复杂度为O(n),空间复杂度为O(n)。
2026-04-01 23:08:31
17
原创 柱状图中的最大矩形(python)
摘要:该算法使用单调递增栈求解柱状图中的最大矩形面积。通过在数组前后添加高度为0的哨兵柱子,维护一个单调递增栈存储索引。遍历数组时,若当前元素小于栈顶元素,则弹出栈顶元素计算面积,其中高度为弹出元素对应的高度,宽度由当前索引和新的栈顶元素确定。最终返回遍历过程中记录的最大面积值。
2026-04-01 22:49:36
31
原创 动态规划——最长回文子串(python)
摘要:本文介绍了一种动态规划方法求解最长回文子串。通过定义dp[i][j]表示字符串s[i..j]是否为回文,利用状态转移方程:当s[i]=s[j]且dp[i+1][j-1]为真时,dp[i][j]为真。算法处理了单字符、相邻字符及间隔字符三种情况,时间复杂度O(n²),空间复杂度O(n²)。最终输出给定字符串中的最长回文子串。
2026-04-01 15:23:17
16
原创 最长回文子串(python)
本文提出了一种使用双指针法解决最长回文子串问题的算法。该算法基于中心扩散思想,将回文子串分为奇数和偶数两种情况处理。对于每个字符位置,分别以单个字符和相邻字符为中心向两侧扩展,寻找最长回文子串。算法时间复杂度为O(n^2),空间复杂度为O(1),通过维护最大子串起始下标和长度来记录最优解。该方法简洁高效地解决了最长回文子串的识别问题。
2026-04-01 14:26:44
18
原创 搜索二维矩阵中的target——二分查找或者二叉搜索树(python)
摘要:本文提供了两种在有序二维矩阵中查找目标值的方法。方法一采用二叉搜索树思想,从矩阵右上角出发,通过比较当前值与目标值决定向左或向下移动。方法二使用二分查找思路,先确定目标值所在行,再在该行中进行查找。两种方法都充分利用了矩阵行列有序的特性,时间复杂度均为O(m+n)和O(m log n)级别。
2026-03-29 18:58:59
43
原创 接雨水(python)
该算法使用双指针法计算雨水存储量。初始化左右指针和两侧最大高度,比较两侧当前最大高度,移动较小一侧的指针。每次移动时更新该侧最大高度,并累加当前高度与最大高度的差值作为储水量。通过动态维护两侧最大高度,确保每个位置都能正确计算其储水量。时间复杂度O(n),空间复杂度O(1),高效解决了接雨水问题。
2026-03-28 22:58:42
15
原创 二分查找之——搜索插入位置(python)
该算法实现了一个二分查找,用于在有序数组中找到目标值的插入位置。通过维护左右指针不断缩小搜索范围,当中间值等于目标值时直接返回索引;若小于目标值则向右搜索,否则向左搜索。最终返回左指针位置即为目标值应插入的位置。时间复杂度为O(log n),空间复杂度为O(1)。
2026-03-27 21:10:42
16
原创 图论之腐烂橘子_BFS(python)
本文实现了一个多源BFS算法来计算橘子腐烂所需时间。算法首先统计网格中的腐烂橘子和新鲜橘子数量,将腐烂橘子坐标存入队列。然后通过BFS遍历,每次处理队列中所有腐烂橘子,检查其四周的新鲜橘子并将其变为腐烂状态,同时更新新鲜橘子计数。每完成一轮BFS,时间增加1分钟。当队列为空且仍有新鲜橘子时返回-1,否则返回总时间。该算法有效模拟了橘子腐烂的扩散过程,时间复杂度为O(mn)。
2026-03-27 19:00:09
76
原创 图论之岛屿数量(python)
该代码使用深度优先搜索(DFS)算法计算二维网格中的岛屿数量。主要思路是:遍历网格中的每个点,当遇到未访问过的陆地('1')时,岛屿计数加1,并通过DFS递归标记所有相连的陆地。DFS过程中检查边界条件,确保不越界访问,并将访问过的陆地标记为已访问。最终返回岛屿总数。该算法能正确处理相邻的水平和垂直陆地,将它们视为同一个岛屿。
2026-03-26 23:03:06
109
原创 每日温度——单调栈(python)
该算法使用单调栈解决每日温度问题。遍历温度列表时,维护一个存储下标的栈。当当前温度高于栈顶元素对应的温度时,弹出栈顶元素并计算天数差存入结果数组。时间复杂度O(n),空间复杂度O(n)。关键点在于利用单调栈性质快速找到更高温度的天数间隔。
2026-03-25 22:15:37
13
原创 设计栈(python)
该摘要描述了一个最小栈(MinStack)的实现方法。栈中每个元素存储为(val, min_val)的元组,在push操作时同时保存当前值和当前最小值:栈空时直接存储(val,val);非空时存储(val,min(val,栈顶min_val))。这样top()返回栈顶val,getMin()返回栈顶min_val,保证了所有操作都是O(1)时间复杂度。pop()直接移除栈顶元素。这种设计通过空间换时间,高效实现了获取最小值的功能。
2026-03-25 21:08:58
10
原创 杨辉三角形/组合数(python)
该程序使用动态规划计算组合数C(n,k),即从n个物品中选k个的方法数。基于杨辉三角原理,构建二维数组dp,其中dp[i][j]表示i个物品选j个的组合数。递推公式为dp[i][j] = dp[i-1][j-1] + dp[i-1][j]。程序通过读取输入的n和k值,初始化dp数组后填充数据,最终返回dp[n][k]作为结果。该算法时间复杂度O(nk),空间复杂度O(nk),适用于中小规模组合数计算。
2026-03-22 19:43:59
26
原创 动态规划——爬楼梯(python)
摘要:本文展示了两种解决爬楼梯问题的动态规划方法。第一种方法优化空间复杂度为O(1),通过滚动更新变量f0和f1来计算第n阶台阶的方案数。第二种方法使用O(n)空间,建立dp数组存储中间结果。两种方法都基于相同的递推关系:dp[i] = dp[i-1] + dp[i-2],表示爬到第i阶的方案数等于前两阶方案数之和。输入n后,程序输出爬到n阶台阶的不同方案总数。
2026-03-22 19:10:41
31
原创 通过前序遍历将二叉树转换为单链表
本文介绍了一种将二叉树展开为链表的算法。通过维护当前指针cur,算法首先定位左子树的最右节点last,然后将当前节点的右子树接在last之后,接着将整个左子树移至右子树位置,最后清空左子树并移动指针。这种方法实现了二叉树的原地展开,时间复杂度为O(n),空间复杂度为O(1)。关键步骤包括:寻找左子树最右节点、子树重接和指针移动,最终将二叉树转换为所有节点都位于右子树的链表结构。
2026-03-20 15:29:05
14
原创 螺旋矩阵输出数字(python)
该算法通过边界收缩法顺时针遍历二维矩阵。设置top、bottom、left、right四个边界变量,依次按右、下、左、上的方向遍历矩阵元素,每完成一个方向的遍历就收缩对应边界。当边界交叉时终止循环,确保不重复访问元素。这种方法在不使用额外空间的情况下,高效地实现了矩阵的螺旋顺序遍历,时间复杂度为O(mn),空间复杂度为O(1)。
2026-03-18 17:45:44
13
原创 有序数组转换为平衡二叉搜索树(python)
该算法将有序数组转换为高度平衡的二叉搜索树。通过递归方法,每次取数组中间元素作为根节点,左半部分构建左子树,右半部分构建右子树。这种方法确保树始终保持平衡,时间复杂度为O(n),需要处理每个数组元素一次。关键步骤包括:检查空数组、计算中间索引、递归构建左右子树、创建当前根节点。这种分治策略有效地将有序数组转换为平衡BST。
2026-03-17 21:05:59
15
原创 括号匹配(python)
该算法通过栈结构验证括号有效性:1)奇数长度直接返回False;2)使用哈希表存储括号映射关系;3)左括号入栈,右括号则检查栈顶是否匹配;4)最终栈空则有效。时间复杂度O(n),空间复杂度O(n)。
2026-03-17 20:44:23
19
原创 二叉树遍历(python)
该代码实现了二叉树的层序遍历(BFS)。使用队列结构,先将根节点入队,然后循环处理队列中的节点:每次取出当前层所有节点,记录它们的值,并将它们的左右子节点入队。最终返回按层组织的节点值列表。时间复杂度O(n),空间复杂度O(n),其中n为节点数。
2026-03-09 22:44:08
21
原创 二叉树的直径(python)
本文介绍了计算二叉树直径的算法。通过深度优先搜索遍历每个节点,计算左右子树的深度之和作为当前节点的直径,并维护全局最大值。关键点在于直径可能不经过根节点,因此需要遍历所有节点。算法时间复杂度为O(n),空间复杂度为O(h),其中n为节点数,h为树高。实现时使用递归计算子树深度,同时更新全局最大直径,最终返回该最大值。
2026-03-09 22:26:09
34
原创 判断对称二叉树
本文实现了一个判断二叉树是否对称的算法。通过定义TreeNode类表示节点,Solution类提供两个方法:isMirror递归比较两棵子树是否镜像对称(左子树与右子树比较,右子树与左子树比较);isSymmetric方法首先检查根节点,然后调用isMirror比较左右子树。该算法采用深度优先搜索策略,时间复杂度为O(n),空间复杂度为O(h),其中n是节点数,h是树的高度。核心思想是通过递归比较外侧节点和内侧节点来判断整棵树的对称性。
2026-03-08 20:40:04
142
原创 二叉树中序遍历(递归+迭代)
本文介绍了二叉树中序遍历的两种实现方法:递归和迭代。递归方法通过深度优先搜索(DFS)先访问左子树,再处理当前节点,最后访问右子树。迭代方法使用栈结构,先将左子树节点全部入栈,再出栈处理节点值并转向右子树。两种方法都能正确实现中序遍历,时间复杂度均为O(n)。递归更简洁但可能栈溢出,迭代更高效但代码稍复杂。两种方法均适用于需要按左-根-右顺序访问二叉树节点的场景。
2026-03-07 22:57:12
37
原创 LRUCache缓存实现
本文实现了一个LRU缓存机制,使用双向链表和哈希表组合实现。双向链表维护缓存项的使用顺序,哈希表提供O(1)的访问效率。核心操作包括:get时若存在则将节点移到链表头部;put时若存在则更新并移动节点,否则检查容量,满则删除尾部节点,再插入新节点到头部。通过remove和push_to_front方法实现节点的删除和移动,保证时间复杂度为O(1)。这种设计有效解决了LRU缓存的高效访问和更新问题。
2026-03-07 17:27:35
334
原创 链表归并排序
本文实现了一个链表排序算法,采用归并排序思想。算法首先使用快慢指针找到链表中间节点将其断开,递归地对前后两部分分别排序,然后合并两个有序链表。关键步骤包括:1)用快慢指针找到中点并断开链表;2)递归排序两个子链表;3)合并两个有序链表。时间复杂度为O(nlogn),空间复杂度为O(logn)的递归栈空间。该算法实现了链表的高效排序。
2026-03-06 15:55:04
160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅