自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 149:直线上最多的点数

给定平面上的点集,需找到。

2025-08-05 12:00:00 106

原创 LeetCode 154:寻找旋转排序数组中的最小值 II

给定的旋转升序数组,需找到其中的。

2025-08-05 12:00:00 367

原创 LeetCode 174:地下城游戏

dp[i][j]:从位置(i,j)到终点(m-1,n-1)所需的最小初始健康值。

2025-08-05 12:00:00 535

原创 LeetCode 140:单词拆分 II

给定字符串s和字典wordDict,需找出(每个单词在字典中,顺序任意)。s。

2025-08-04 23:24:11 488

原创 LeetCode 135:分糖果

给定孩子的评分数组,需满足,求最少糖果总数。

2025-08-04 23:21:14 331

原创 LeetCode 132:分割回文串 II

状态定义dp[i]表示前i个字符(s[0..i-1]的最少分割次数。初始条件dp[0] = -1(空字符串的分割次数为-1,方便后续计算);(最坏情况:每个字符单独分割,如"abc"需要2次分割)。状态转移对于每个j(前j个字符),遍历所有可能的分割点i0 ≤ i < j):若s[i..j-1]是回文(),则。

2025-08-04 23:19:33 513

原创 LeetCode 123:买卖股票的最佳时机 III

需计算的最大利润,核心是通过buy1sell1buy2sell2通过逐天更新这四个状态,最终sell2即为最大利润(覆盖“0、1、2次交易”的最优解)。

2025-08-03 12:00:00 704

原创 LeetCode 124:二叉树中的最大路径和

给定二叉树,求(节点相连,无分叉,每个节点最多出现一次)的。

2025-08-03 12:00:00 1039

原创 LeetCode 126:单词接龙 II

需找到beginWordendWordwordList。

2025-08-03 12:00:00 752

原创 LeetCode 65:有效数字

InputType:将字符分类,简化状态转移的条件判断。State:定义解析过程的所有阶段,覆盖合法/非法转移的所有情况。状态机是处理复杂规则匹配的“万能钥匙”,通过清晰的状态定义和转移规则,将有效数字的判断转化为状态转移路径的合法性检查。该方法不仅解决问题,还能通过状态枚举覆盖所有边界情况(如.11.1e10等),是字符串解析类问题的经典解决方案。

2025-08-02 12:00:00 1039

原创 LeetCode 84:柱状图中最大的矩形

给定柱状图的高度数组heights,每个柱子宽度为1,需找到。O(n²)O(n)

2025-08-02 12:00:00 706

原创 LeetCode 115:不同的子序列

设dp[i][j]s的前i个字符s[0..i-1]t的前j个字符t[0..j-1]的匹配方案数(即s的前i个字符中,子序列等于t的前j个字符的个数)。

2025-08-02 12:00:00 1015

原创 LeetCode 42:接雨水

双指针法通过动态维护两侧最高柱,巧妙地将问题转化为一次线性遍历,同时满足时间和空间的最优解。其核心在于利用“较低侧的储水由当前最高柱决定”的观察,避免了暴力法的重复计算和动态规划的额外空间开销,是算法优化的典范。

2025-08-01 12:00:00 252

原创 LeetCode 44:通配符匹配

设dp[i][j]字符串s的前i个字符s[0..i-1]模式串p的前j个字符p[0..j-1]是否完全匹配。

2025-08-01 12:00:00 992

原创 LeetCode 51:N皇后问题

要求在N×N的棋盘上放置N个皇后,使得它们互不攻击(同一行、列、对角线不能有多个皇后)。N!

2025-08-01 12:00:00 1626

原创 LeetCode 52:N皇后 II

要求计算在N×N棋盘上放置N个皇后的(皇后间互不攻击,即同一行、列、对角线无重复)。与第51题(输出所有布局)不同,本题只需,因此可通过高效求解。

2025-08-01 12:00:00 743

原创 LeetCode 85:最大矩形

给定仅含0和1的二维矩阵,需找到1。O(n²m²)

2025-07-31 23:45:11 1393

原创 LeetCode 30:串联所有单词的子串

给定字符串s和单词数组words(所有单词长度相同),需找出s中所有由words中单词而成的子串的起始索引。

2025-07-31 12:00:00 947

原创 LeetCode 37:解数独

1-93×3。

2025-07-31 12:00:00 668

原创 LeetCode 41:缺失的第一个正数

给定nums,找出其中n3123212。

2025-07-31 12:00:00 732

原创 Java System类全解析:从基础到实战的进阶指南

System类作为Java与底层系统交互的核心接口,其功能远比表面看起来更丰富。从JDK1.0到JDK8的演进历程,我们看到了Java团队对系统交互能力的持续优化。在JDK8中,凭借原生实现和JIT优化成为数组复制的性能标杆;虽线程安全但存在并发瓶颈,需通过缓存规避;和nanoTime()的差异化设计,提醒我们根据场景选择合适的时间API。理解这些细节,不仅能帮助我们写出更高效的代码,更能深入领会Java"平台无关性"背后的实现智慧。在实际开发中,既要善用System类的底层能力,也要学会结合。

2025-07-30 10:57:05 1092

原创 LeetCode 25:K 个一组翻转链表

给定链表头节点head和整数k,要求k,不足k个的节点保持原序。k。

2025-07-30 10:44:16 636

原创 LeetCode 32:最长有效括号

初始化创建长度为n的dp数组,初始值均为0。初始化maxLen为0,用于记录最长有效子串的长度。遍历字符串(从i = 1若,跳过(dp[i]保持0若,分情况处理:情况 1,更新。情况 2,计算,若prev >= 0且,更新。更新。返回结果maxLen。动态规划解法通过定义dp[i]为以i结尾的最长有效括号长度,巧妙地利用历史结果推导当前状态,避免了暴力枚举的高复杂度。关键在于理解两种情况下的状态转移方程,特别是情况 2 中对更前方字符的检查逻辑。

2025-07-30 10:32:55 572

原创 LeetCode 4:寻找两个正序数组的中位数

给定两个有序(升序)数组 和 ,要求找到它们的中位数,且算法时间复杂度为 ( 和 分别是两个数组的长度)。中位数定义:若直接合并两个数组(时间复杂度 ),虽能解决问题,但无法满足题目对时间复杂度的严格要求()。因此,必须利用数组有序的特性,通过 二分查找 避免完全合并。中位数的本质是将合并后的数组划分为左右两部分,使得:对于两个有序数组,我们可以通过二分查找分割点,将 和 分别划分为左右两部分,使得:为了减少二分查找的范围,确保 是较短的数组(若 更长,则交换 和 )。这样,二分查找仅需在较短

2025-07-30 10:20:42 716

原创 LeetCode 87:扰乱字符串

给定两个长度相同的字符串s1和s2,判断s2是否是s1的。xyxy。

2025-07-28 12:05:59 1022

原创 LeetCode 214:最短回文串

给定字符串s,需通过将其转换为回文串,求的 such 回文串。

2025-07-28 12:00:59 759

原创 LeetCode 68:文本左右对齐

给定单词数组words和最大行宽maxWidth,需将单词排版为maxWidth。

2025-07-28 11:57:41 536

原创 LeetCode 239:滑动窗口最大值

给定整数数组nums和窗口大小k,需返回。

2025-07-27 18:14:06 659

原创 LeetCode 76:最小覆盖子串

给定字符串s和t,需找到 st。若不存在则返回空字符串。

2025-07-27 18:11:41 1001

原创 LeetCode 60:排列序列

给定整数n和k,返回集合的k。直接生成所有排列再遍历到第k个的方法(时间复杂度O(n!)会因n≥10时阶乘爆炸而超时,因此需要的高效解法。

2025-07-27 18:08:33 566

原创 LeetCode 854:相似度为 K 的字符串

BFS 的逐层扩展:确保找到的路径是最短的,符合题目要求的最小交换次数。候选位置的智能筛选只考虑能修复当前不匹配位置的交换优先处理能同时修复两个位置的最优交换避免交换已经在正确位置的字符状态去重:使用哈希集合记录已访问的状态,避免重复计算,大幅提高效率。通过这些优化,算法能够在合理时间内处理较大的输入,找到最优解。这种方法不仅适用于字符串相似度问题,还可推广到其他需要寻找最短操作序列的问题中。

2025-07-26 22:03:11 915

原创 LeetCode 1074:元素和为目标值的子矩阵数量

给定二维矩阵matrix和目标值target,需统计target。直接枚举所有子矩阵的时间复杂度为O(m²n²)mn为矩阵行列数),无法通过大数据用例,因此需要。

2025-07-26 20:31:13 758

原创 LeetCode 895:最大频率栈

该方案通过频率分组 + 栈结构巧妙解决了“最高频率优先,同频率近栈顶优先”的需求,确保了所有操作的O(1)时间复杂度,高效且易理解。核心思想是利用哈希表维护频率关系,栈维护同频率下的顺序,是处理“频率 + 顺序”类问题的经典思路。

2025-07-26 20:25:42 902

原创 深入理解Java JDK动态代理

/ 业务接口// 方法1:无返回值// 方法2:有返回值// 接口实现类(目标对象)@Override@Override适用场景目标类实现接口,需灵活增强方法(如Spring AOP、RPC代理)。最佳实践优先为业务类定义接口,解耦实现与调用。将增强逻辑封装到,保持单一职责。利用保存代理类字节码,辅助调试。局限性无法代理无接口的类,此时需结合CGLIB或其他字节码增强工具。通过本文的深入解析,相信你已掌握JDK动态代理的核心原理与应用技巧。

2025-07-25 18:11:50 1320

原创 LeetCode 391:完美矩形

LeetCode 391 完美矩形解法摘要 判断若干小矩形能否精确覆盖大矩形需满足: 面积守恒:小矩形总面积等于大矩形面积(避免间隙); 顶点规则:除大矩形的4个角点外,其他顶点必须出现偶数次(避免重叠)。 算法步骤: 计算边界与面积:确定大矩形范围(left/bottom/right/top),若小矩形面积总和不匹配则失败; 统计顶点:哈希表记录所有顶点出现次数,大矩形角点必须出现1次,其余顶点需成对出现; 校验规则:检查角点唯一性及顶点次数的奇偶性。 复杂度:时间复杂度O(n),空间复杂度O(n),适用

2025-07-25 17:58:44 342

原创 LeetCode 233:数字 1 的个数

摘要:LeetCode 233题要求统计[0, n]范围内所有整数中数字1的出现次数。直接暴力枚举会超时,需通过数学规律逐位分析。核心思路是将数字拆分为高位、当前位和低位,根据当前位数值分三种情况计算贡献:当前位小于1、等于1或大于1。算法时间复杂度为O(logn),空间复杂度O(1)。通过位分解和数学推导,避免了暴力解法的高复杂度,适用于大数范围统计。

2025-07-25 17:54:02 943

原创 LeetCode 127:单词接龙

LeetCode 127单词接龙问题要求找到从beginWord到endWord的最短转换序列,每次只能改变一个字母且中间单词必须在wordList中。核心解法是广度优先搜索(BFS),通过分层遍历确保首次到达目标时的路径最短。算法步骤包括:预处理检查、BFS初始化、邻居生成和去重处理。关键优化包括使用HashSet加速查找,26字母替换生成邻居,以及分层遍历保证最短路径。时间复杂度为O(N×L×26),空间复杂度O(N)。该BFS方案是解决此类最短路径问题的经典方法。

2025-07-25 17:51:19 710

原创 LeetCode 23:合并 K 个升序链表

本文介绍了合并K个升序链表的两种高效解法。优先队列法通过维护最小堆动态获取最小节点,时间复杂度O(NlogK),空间O(K)。分治合并法采用递归分治策略,先两两合并再递归合并结果,同样时间复杂度O(NlogK)但空间更优O(logK)。两种方法都能高效解决问题,优先队列实现直观,分治合并空间更优。示例验证了两种方法的正确性,根据实际需求选择适合的解法即可。

2025-07-24 23:09:09 843

原创 LeetCode 10:正则表达式匹配

LeetCode 10正则表达式匹配问题要求实现支持.和*的完全匹配。核心解法是动态规划:定义二维数组dp[i][j]表示字符串s前i个字符与模式p前j个字符的匹配状态。初始化处理空匹配和*前缀情况,状态转移分两种情况:当p[j-1]不是*时需字符匹配;当遇到*时考虑匹配0次或多次。算法时间复杂度O(mn),空间复杂度O(mn)。这种解法通过DP表精确处理了*的灵活性,确保了匹配的正确性。

2025-07-24 23:05:24 501

原创 LeetCode 2322:从树中删除边的最小分数

本文介绍了LeetCode 2322题的解法,该问题要求从无向树中删除两条边,将树分割为三个连通分量,并计算每个分量的异或值,最终求最大异或值与最小异或值的差的最小分数。核心思路是通过DFS预处理子树异或和时间戳,利用异或的可拆分性,枚举所有可能的边对,分三种情况(有祖先关系和无祖先关系)计算三个分量的异或值。算法时间复杂度为O(n²),其中DFS预处理O(n),枚举边对O(n²)。该方法高效地解决了树分割后的异或值计算问题。

2025-07-24 22:32:27 476

空空如也

空空如也

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

TA关注的人

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