
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
LeetCode 97题“交错字符串”要求判断s3是否由s1和s2交错组成。使用动态规划,定义dp[i][j]表示s1[0:i]与s2[0:j]能否交错拼成s3[0:i+j]。通过网格路径模型,状态转移基于字符匹配与前驱状态。时间复杂度O(mn),空间复杂度可优化至O(n)。

文章摘要 LeetCode 131题要求将字符串分割为回文子串的所有可能方案。该问题适合使用回溯算法(DFS)解决,通过模拟切割线的方式遍历所有可能的分割点。关键思路是:1)递归参数表示当前切割起始位置;2)横向遍历尝试不同切割点;3)检查子串是否为回文;4)合法则继续递归,否则回溯。代码实现使用双指针法判断回文,并通过引用传递避免字符串拷贝开销。时间复杂度取决于回文子串数量,空间复杂度为递归栈深

本文介绍了LeetCode 55题 跳跃游戏 的贪心算法解法。题目要求判断能否从数组第一个下标跳到最后一个下标。解题思路采用贪心算法,通过维护当前最远可达范围r,遍历数组时不断更新r为max(r, i+nums[i])。关键点在于只要当前位置i在可达范围内,就尝试扩展最远距离。C++实现中,当i超出r时提前终止遍历,最后检查r是否覆盖终点。该解法时间复杂度O(n),空间复杂度O(1),是解决跳跃类

本文介绍了LeetCode第70题 爬楼梯 的两种动态规划解法。首先分析题目特点,推导出状态转移方程f[i]=f[i-1]+f[i-2],发现其本质是斐波那契数列问题。第一种解法使用一维数组存储中间状态,空间复杂度O(n);第二种解法通过滚动变量优化空间,仅用三个变量交替记录前两个状态,将空间复杂度降至O(1),是面试最优解。两种方法均采用自底向上的递推方式,时间复杂度均为O(n)。文章包含完整的

摘要:LeetCode 283题要求将数组中的零元素移动到末尾,同时保持非零元素的原始顺序。解题采用双指针法:快指针遍历数组,慢指针标记非零元素应放置的位置。当快指针遇到非零元素时,与慢指针位置交换,确保非零元素按序前移。这种方法通过原地交换操作,实现O(N)时间复杂度和O(1)空间复杂度的高效解。C++代码通过swap函数简洁实现了这一逻辑。

摘要:LeetCode 11题要求找到两条垂线构成的容器能盛最多水的方案。解题采用双指针+贪心策略,通过维护左右指针从数组两端向中间移动,每次移动较短的垂线以寻找可能的更大盛水量。核心公式为盛水量=宽度×较短垂线高度,时间复杂度优化至O(N)。C++实现中,双指针不断比较当前盛水量并更新最大值,最后返回全局最优解。该算法巧妙利用木桶效应和贪心思想,避免了暴力枚举的低效问题。








