自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 day 60 图论part11

本文介绍了两种经典算法:Floyd算法和A算法。Floyd算法通过三维动态规划数组计算图中任意两点间经过k个节点的最短路径,适用于多源最短路径问题。A算法是一种启发式搜索算法,结合BFS和启发函数(如欧几里得距离)优化路径搜索,适用于求解最短步数问题(如骑士移动)。此外还总结了常见最短路算法(Dijkstra、Bellman-Ford、SPFA等)和图论相关算法(DFS/BFS、并查集、最小生成树等)。这些算法为解决各类图论问题提供了系统的方法论。

2026-03-23 15:06:53 91

原创 day 59 图论part10

本文介绍了Bellman-Ford算法的三种优化应用:1) 使用队列优化(SPFA)计算城市间最短路径;2) 通过节点入队次数判断负权回路;3) 在有限步数内求解单源最短路问题。每个应用都给出了对应的Java实现代码,分别处理了常规最短路径计算、负环检测以及带限制条件的最短路径问题。算法通过松弛操作逐步优化路径估计,适用于存在负权边的图结构。

2026-03-22 15:29:01 80

原创 day 58 图论part9

本文介绍了两种最短路径算法:Dijkstra堆优化版和Bellman-Ford算法。Dijkstra算法使用优先队列(小顶堆)高效获取最小值,避免遍历整个数组,适用于非负权图。Bellman-Ford算法通过n-1次松弛边操作计算最短路径,适用于含负权边的图。两篇示例分别解决了"参加科学大会"和"城市间货物运输"问题,展示了如何实现这两种算法并处理无解情况(输出-1或"unconnected")。代码采用Java实现,包含必要的类定义和输入处理逻辑

2026-03-21 10:38:26 83

原创 day 57 图论part8

本文介绍了两种经典图算法:拓扑排序和Dijkstra算法。拓扑排序通过不断移除入度为0的节点来得到有向无环图的线性序列,Java实现中使用队列处理节点并检测是否存在环。Dijkstra算法采用朴素版实现单源最短路径,通过选择未访问的最近节点并更新邻接节点距离,最终输出源点到终点的最短路径。两段代码均包含输入处理和异常情况检测(环检测和不可达判断),完整展示了算法核心步骤的实现细节。

2026-03-20 10:30:54 33

原创 day 56 图论part7

本文介绍了两种解决最小生成树问题的算法:Prim算法和Kruskal算法。Prim算法通过维护一个优先队列逐步扩展生成树,使用邻接矩阵存储图结构,时间复杂度为O(V²)。Kruskal算法则采用边排序和并查集结构,按权值从小到大选择边,时间复杂度为O(ElogE)。两种算法都解决了卡码网53题"寻宝"的最小生成树问题,Prim算法适用于稠密图,而Kruskal更适合稀疏图。文中提供了完整的Java实现代码,包括并查集数据结构的具体实现。

2026-03-19 10:02:24 80

原创 day 54 图论part6

本文介绍了两种解决图中多余边问题的算法。108题针对无向图,使用并查集检测成环边,当连接两个已同根节点时即为多余边。109题处理有向图,分为两种情况:存在入度为2的节点时,需删除一条边且保证不成环;否则直接检测成环边。两种方案都通过并查集实现连通性判断,其中109题额外需要处理入度统计和边删除验证。核心算法包括并查集的初始化、查找、合并和同根判断操作。

2026-03-18 10:58:22 67

原创 day 53 图论part5

本文介绍了使用并查集解决卡码网107题"寻找存在的路线"的方法。并查集实现了四种核心操作:初始化(每个节点指向自己)、find(查找根节点并进行路径压缩)、join(合并两个集合)和isSame(判断是否同属一个集合)。通过读取节点和边信息构建并查集,最后查询两个节点是否连通。Java实现中,DisJoint类封装了这些操作,主程序通过调用这些方法高效解决了路径存在性问题,时间复杂度接近常数级。

2026-03-17 11:10:23 59

原创 day52 图论part4

本文包含三个算法题的Java实现:1)字符串迁移问题使用BFS寻找最短路径;2)有向图完全连通性检测通过DFS遍历;3)海岸线周长计算通过检查陆地边界。第一题通过BFS遍历字符变换过程,第二题用DFS验证图的连通性,第三题统计陆地与水或边界的接触边数。三题分别展示了广度优先搜索、深度优先搜索和网格遍历的应用。

2026-03-16 11:16:49 100

原创 day51 图论part3

本文包含三个岛屿问题的DFS解法:1) 101题计算不与边界相连的孤岛总面积,通过DFS标记连通区域并判断是否接触边界;2) 102题将边界相连的岛屿沉没,通过DFS标记边界连通区域后翻转剩余岛屿;3) 103题采用逆向思维,从边界出发DFS遍历可达的高海拔区域。三题均使用深度优先搜索处理二维矩阵,通过不同的标记策略和边界条件判断实现特定功能,展现了DFS在图遍历中的灵活应用。

2026-03-15 14:44:14 232

原创 day 50 图论part2

本文介绍了三种解决岛屿问题的算法实现。第一种使用DFS深度优先搜索统计孤岛数量,通过递归访问相邻陆地并标记已访问节点。第二种采用BFS广度优先搜索实现相同功能,使用队列处理相邻节点。第三种在DFS基础上扩展,计算最大岛屿面积,在遍历过程中累加陆地单元格数并记录最大值。三种方法都通过二维数组表示地图,使用访问标记数组避免重复计算,时间复杂度均为O(nm)。这些算法适用于网格类连通性问题,可根据具体需求选择DFS或BFS实现。

2026-03-14 21:14:21 68

原创 day 49 图论part1

本文介绍了图论基础概念及搜索算法应用。主要内容包括:1)图的基本概念(有向/无向图、连通性、邻接表/矩阵表示);2)深度优先搜索(DFS)的实现模板及在路径查找中的应用;3)广度优先搜索(BFS)的实现模板及遍历过程。通过卡码网98题展示了DFS查找图中所有可达路径的具体实现,使用邻接矩阵存储图结构,通过递归和回溯记录路径。同时给出了BFS的标准实现流程,包括队列使用和访问标记机制。两种搜索算法均适用于图结构遍历,分别采用不同策略探索节点。

2026-03-13 10:55:14 71

原创 day 47 单调栈part02

本文介绍了使用单调栈解决两个LeetCode问题的思路。第一个是42题"接雨水",通过单调递增栈找到左右两边更高的柱子,计算每个凹槽的储水量。第二个是84题"柱状图中最大矩形",利用单调递减栈定位左右更小的柱子,计算以当前柱子为高的最大矩形面积。两种解法都通过维护单调栈结构,在O(n)时间复杂度内高效解决问题,展示了单调栈在解决边界查找问题中的典型应用。

2026-03-12 10:55:33 17

原创 day 46 单调栈part1

本文介绍了三道使用单调栈解决"下一个更大元素"问题的LeetCode题目解法。739题通过单调递增栈计算每日温度需要等待的天数;496题利用哈希表存储数组元素索引,再对第二个数组进行单调栈处理;503题通过取模遍历两遍数组解决循环数组问题。三题都采用类似的单调栈思路,时间复杂度均为O(n),空间复杂度为O(n)。核心思想是利用栈维护一个递减序列,遇到更大元素时弹出栈顶并记录结果。

2026-03-11 10:41:08 17

原创 day 45 动态规划 part13

本文介绍了LeetCode中两道回文问题的动态规划解法。647题使用布尔型dp[i][j]判断子串是否为回文,统计回文子串数量;516题用dp[i][j]记录最长回文子序列长度。两题均采用从后向前的遍历顺序,通过状态转移方程求解。文章最后总结了动态规划的五个解题步骤:定义dp数组、推导递推公式、初始化、确定遍历顺序和验证。这两道题展示了动态规划在解决回文问题上的典型应用。

2026-03-10 10:41:22 27

原创 day 44 动态规划

本文探讨了三个字符串动态规划问题:LeetCode 115(不同的子序列)、583(两个字符串的删除操作)和72(编辑距离)。通过定义二维DP数组,分别处理字符串匹配、删除操作和编辑距离问题。核心思路是当字符匹配时继承前一状态,不匹配时取最小操作次数(删除或替换)。三个问题都采用相似的DP框架,区别在于状态转移方程的具体处理逻辑,展现了动态规划在字符串处理中的通用性。

2026-03-09 11:02:06 21

原创 day 43 动态规划

本文总结了四个LeetCode动态规划问题的解法。1143题使用二维DP数组求解最长公共子序列,当字符不相等时取左边或上边的最大值。1035题转化为最长公共子序列问题,解法与1143相同。53题通过一维DP数组记录包含当前元素的最大子序和。392题通过DP数组判断s是否为t的子序列,最终比较DP值与s长度。这些解法都体现了动态规划的核心思想:利用子问题的解构建更大问题的解。

2026-03-08 11:38:00 31

原创 day 42 动态规划

本文介绍了三个动态规划算法的实现:1) LeetCode 300 最长递增子序列,使用一维dp数组记录以每个元素结尾的最长子序列长度;2) LeetCode 674 最长连续递增序列,通过比较相邻元素更新dp数组;3) LeetCode 718 最长重复子数组,采用二维dp数组记录两个数组的公共子数组长度。三种解法均通过遍历数组填充dp值,并维护最大值作为结果。代码示例展示了Java实现,包括数组初始化、状态转移和结果更新过程。

2026-03-06 15:43:07 47

原创 day 40 动态规划

本文总结了三种股票买卖问题的动态规划解法:1) 最多交易k次的股票买卖(LeetCode 188),使用2k+1维状态数组记录不同交易阶段;2) 含冷冻期的股票买卖(LeetCode 309),通过4个状态区分持股、不持股、当天卖出和冷冻期;3) 含手续费的股票买卖(LeetCode 714),在卖出时扣除手续费。三题均采用二维DP数组记录状态转移,时间复杂度O(n),空间复杂度O(n)。核心思路都是通过状态细分来准确描述买卖过程中的不同情况。

2026-03-05 14:57:10 31

原创 day 39 动态规划

本文介绍了LeetCode上三道股票买卖问题的动态规划解法:121题(单次买卖)、122题(多次买卖)和123题(最多两次买卖)。121题使用二维数组记录持有/不持有状态,122题允许多次交易需调整状态转移方程,123题则需维护5个状态表示两次买卖的不同阶段。三题均通过比较前一天状态与当天操作后的收益来更新dp数组,最终返回最后一天的最大收益。这些解法展示了动态规划在股票问题中的灵活应用。

2026-03-05 10:28:32 30

原创 day 37 动态规划

本文介绍了三个LeetCode动态规划问题的解法。322题使用完全背包思想求解零钱兑换,通过初始化dp数组并迭代更新最小硬币数。279题将完全平方数转化为背包问题,用动态规划计算组成n的最少平方数。139题单词拆分采用布尔型dp数组,通过双重循环判断字符串能否拆分成字典中的单词。三题都运用了动态规划的核心思想,但根据问题特点调整了遍历顺序和状态转移方式。

2026-03-04 11:24:18 38

原创 day 38 动态规划

本文介绍了LeetCode中三个打家劫舍问题的动态规划解法。198题采用一维DP数组,记录偷或不偷当前房屋的最大收益;213题针对环形房屋,分两种情况处理;337题则采用后序遍历二叉树,使用二维数组记录节点偷或不偷的状态。三题均通过状态转移方程求解最大收益,展示了动态规划在不同场景下的应用。

2026-03-04 11:15:09 34

原创 day 36 动态规划

本文整理了四个背包问题的动态规划解法。完全背包问题通过二维数组优化为一维数组,其中物品可以重复使用(卡码网52题)。零钱兑换II(LeetCode 518)计算组合数,采用先物品后背包的遍历顺序。组合总和IV(LeetCode 377)计算排列数,通过先背包后物品的遍历实现。卡码网57题爬楼梯问题则转化为完全背包的排列问题,同样采用特定遍历顺序求解。这些解法展示了动态规划在背包类问题中的灵活应用,重点在于区分组合与排列的不同遍历顺序。

2026-03-02 14:40:10 48

原创 day 35 动态规划

本文通过三个LeetCode题目展示了01背包问题的应用解法。1049题将石头分成两组,转化为背包问题求最接近sum/2的子集和;494题通过数学转换将目标和问题变为背包问题;474题使用二维背包统计字符串能组成的最大数量。三题均采用动态规划,通过逆向遍历避免重复计算,核心代码简洁高效,体现了背包问题的典型解决思路。

2026-03-01 15:38:25 24

原创 day 34 动态规划

本文介绍了01背包问题的两种动态规划解法:二维数组和一维数组实现。二维解法通过构建dp[i][j]表示前i个物品在容量j时的最大价值;一维解法优化空间复杂度,仅使用一维数组。此外,文章展示了如何将分割等和子集问题转换为背包问题,通过判断数组元素是否能恰好填满目标和的一半来求解。核心代码均采用Java实现,展示了动态规划在背包类问题中的应用。

2026-03-01 13:51:09 23

原创 day 33 动态规划

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

2026-02-28 11:17:53 21

原创 day 32 动态规划

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

2026-02-28 10:23:34 16

原创 day 31 贪心算法

本文包含三个算法问题的解决方案:1)合并区间,通过排序和遍历合并重叠区间;2)单调递增数字,从右向左调整数字使其单调递增;3)监控二叉树,后序遍历统计最少监控摄像头数量。代码均使用Java实现,分别采用区间合并、数字调整和树遍历等技巧解决问题。

2026-02-19 11:48:35 23

原创 day 30 贪心算法

本文分享了三个区间相关问题的解法:1) 452题用最少数量的箭引爆气球,通过排序和区间合并求解;2) 435题无重叠区间,统计需要移除的区间数;3) 763题划分字母区间,利用哈希数组记录字符最后出现位置进行分割。每个问题都给出了清晰的Java实现代码,核心思路是通过排序和贪心算法优化处理区间重叠问题。

2026-02-18 11:39:16 23

原创 day 29贪心算法

本文介绍了四个贪心算法问题的解法:1) 加油站问题通过计算油量差确定起点;2) 分发糖果问题通过左右两次遍历满足条件;3) 柠檬水找零问题模拟找零过程;4) 身高重建队列问题通过排序和插入实现。每个问题都给出了Java代码实现,展示了贪心算法在不同场景下的应用。

2026-02-18 11:34:42 17

原创 day 27 贪心算法

本文展示了三个贪心算法经典问题的Java解法:1)455题"分发饼干"通过排序和贪心策略匹配孩子与饼干;2)376题"摆动序列"通过比较相邻元素差值统计摆动次数;3)53题"最大子序和"通过维护当前和与最大和来求解连续子数组最大和。每个解法都体现了贪心算法的核心思想——局部最优选择,代码简洁高效,时间复杂度均为O(n)。这些示例展示了贪心算法在解决分配、序列和最值问题中的典型应用。

2026-02-17 10:52:24 29

原创 day 28 贪心算法

本文提供了四个LeetCode算法题的Java解法。122题通过贪心算法计算股票买卖最大利润;55题使用覆盖范围判断能否跳跃到终点;45题通过动态维护当前和下一步覆盖范围计算最少跳跃次数;1005题通过排序和策略性取反实现K次取反后的最大数组和。所有解法均采用高效实现,时间复杂度最优。

2026-02-17 10:46:15 19

原创 day25 回溯法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

2026-02-09 21:28:21 42

原创 day 24回溯法

本文摘要:文章分享了三个LeetCode题目的回溯算法解法。1) 复原IP地址(93题):通过回溯和验证函数分割字符串为有效IP地址;2) 子集(78题):通过回溯生成所有子集,无需终止条件;3) 子集II(90题):在78题基础上处理重复元素,使用排序和标记数组去重。三个解法均采用经典回溯框架,通过递归和剪枝实现高效搜索。

2026-02-06 10:59:52 21

原创 day 23 回溯法

本文介绍了LeetCode中三道回溯算法题目的解题思路与Java实现。39题"组合总和"通过回溯遍历所有可能组合,允许重复使用元素;40题"组合总和II"在39题基础上增加了去重处理,通过排序和标记数组实现树层去重;131题"分割回文串"使用回溯法分割字符串,并检查每个子串是否为回文。三题均采用经典回溯模板,通过递归实现深度优先搜索,并在过程中维护当前路径状态,展示了回溯算法在组合和分割问题中的典型应用。

2026-02-05 11:25:58 46

原创 day22 回溯法

本文展示了LeetCode中三个组合问题的回溯解法。77题通过递归生成n个数中k个数的组合;216题在组合基础上增加了和为n的限制,并进行了剪枝优化;17题处理电话号码字母组合,使用字符串拼接完成回溯。三题均采用经典回溯模板:递归遍历可能解,通过剪枝优化效率,并在达到终止条件时保存结果。代码展示了回溯法的核心思想:尝试-回溯-剪枝,适用于各类组合问题求解。

2026-02-04 11:20:38 18

原创 day21二叉树

本文介绍了三个LeetCode二叉树问题的解法:1)修剪二叉搜索树(669题),通过递归处理小于/大于区间的节点及其子树;2)有序数组转二叉搜索树(108题),采用二分法递归构建平衡BST;3)二叉搜索树转累加树(538题),使用逆中序遍历和累加变量更新节点值。三题均采用递归方法,分别利用了BST特性、二分思想和双指针技巧,时间复杂度均为O(n)。

2026-02-03 10:11:14 48

原创 day20 二叉树

本文介绍了LeetCode中二叉搜索树相关的三道题目解法。235题利用二叉搜索树特性递归查找最近公共祖先;701题通过递归在叶子节点位置插入新值;450题处理删除节点的五种情况,包括调整子树结构。三题均采用递归方法,充分利用二叉搜索树的有序特性,时间复杂度为O(h),h为树高。代码简洁高效,展现了二叉搜索树的基本操作思路。

2026-02-02 10:59:08 46

原创 day18 二叉树

本文介绍了三道LeetCode二叉树相关题目的解法:1) 530题使用双指针中序遍历计算二叉搜索树相邻节点的最小差值;2) 501题通过中序遍历统计出现频率最高的节点值(众数);3) 236题采用后序遍历寻找二叉树中两个节点的最近公共祖先。每道题都提供了Java实现代码,并简要说明了关键思路:530题利用BST有序特性,501题维护最大计数和结果列表,236题通过递归处理左右子树并判断返回值。这些解法都利用了二叉树的不同遍历方式来解决特定问题。

2026-01-31 14:19:05 37

原创 day17 二叉树

本文展示了LeetCode中四个二叉树相关问题的Java解法。654题通过递归构建最大二叉树,每次选取当前区间最大值作为根节点。617题采用递归合并两棵二叉树,节点值为对应节点之和。700题在二叉搜索树中递归搜索目标值。98题利用中序遍历验证二叉搜索树,确保序列严格递增。这些解法都采用了递归思想,通过合理设置终止条件和递归步骤解决问题,代码简洁高效。

2026-01-30 11:27:26 58

原创 day16 二叉树

本文展示了LeetCode中四个二叉树相关问题的Java解法:1) 513题使用深度优先搜索找树左下角的值;2) 112题通过递归判断是否存在路径和等于目标值;3) 113题扩展112题,记录所有满足条件的路径;4) 106题利用中序和后序遍历序列重构二叉树。每个解法都采用递归思想,通过遍历或分治策略解决问题,代码中包含了节点定义、递归终止条件和核心逻辑实现。这些题目涵盖了二叉树的基本操作和典型应用场景。

2026-01-29 11:32:58 167

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除