萘柰奈的LeetCode刷题记录
文章平均质量分 76
个人的日常LeetCode刷题的复盘和总结
萘柰奈
为做出自己的游戏而努力喵
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode刷题记录----72.编辑距离(Medium)
本文通过动态规划方法解决编辑距离问题(LeetCode 72题)。解题思路是从字符串末尾开始比较字符,若不相同则进行插入、删除或替换操作。关键点在于发现对word1的修改操作等价于对word2的相应操作,从而简化状态转移方程为dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1。边界条件初始化后,通过二维数组实现状态转移,最终得到最小编辑距离。算法时间复杂度O(MN),空间复杂度O(MN)。总结指出动态规划解题要点:从递归思路出发,识别状态转移条件原创 2025-10-09 10:23:42 · 932 阅读 · 0 评论 -
LeetCode刷题记录----75.颜色分类
该文章讨论了LeetCode 75题"颜色分类"的三种解法。初始思路是直接使用快速排序(O(nlogn)),但题目只有0/1/2三个元素,因此提出更优解:1)单指针两次扫描法,分别排序0和1;2)双指针首部法,同时处理0和1的交换;3)双指针首尾收缩法,将0交换到头部,2交换到尾部。最优解法时间复杂度均为O(n),空间复杂度O(1)。文章强调对于有限元素的排序问题,可以利用已知元素特性实现更高效的排序算法。原创 2025-10-01 11:21:02 · 948 阅读 · 0 评论 -
LeetCode刷题记录----31.下一个排序(Medium)
该文章介绍了如何寻找整数数组的下一个字典序排列。解题思路是:1)从后往前找到第一个非降序元素作为较小数;2)在其右侧找到第一个比它大的元素作为较大数;3)交换两者并将较小数后的部分翻转。若整个数组都是降序,则直接翻转整个数组。算法时间复杂度为O(N),空间复杂度为O(1)。核心思想是在保证排列变大的前提下,使变化幅度尽可能小。通过分析相邻排列的差异,找到关键交换点并调整后续元素顺序。原创 2025-10-01 10:57:31 · 874 阅读 · 0 评论 -
LeetCode刷题记录----169.多数元素(Easy)
本文介绍了两种解决"多数元素"问题的算法。第一种使用哈希表记录元素出现次数,时间和空间复杂度均为O(N)。第二种采用投票计数法,通过维护候选值和计数值,在O(N)时间复杂度和O(1)空间复杂度内解决问题。文章还提到其他可能的解法,如随机选择和分治法。投票法在保持线性时间的同时显著优化了空间复杂度,是更优的解决方案。原创 2025-09-29 11:56:43 · 322 阅读 · 0 评论 -
LeetCode刷题记录----1143.最长公共子序列(Medium)
【摘要】1143题最长公共子序列采用二维动态规划解法。定义dp[i,j]表示text1前i个字符与text2前j个字符的最长公共子序列长度。边界条件为dp[0,j]=dp[i,0]=0。状态转移分两种情况:当字符匹配时dp[i,j]=dp[i-1,j-1]+1;不匹配时取dp[i-1,j]和dp[i,j-1]的最大值。该算法时间复杂度O(MN),空间复杂度O(MN),是处理字符串公共子序列问题的典型动态规划方法。原创 2025-09-28 10:17:42 · 226 阅读 · 0 评论 -
LeetCode刷题记录----5.最长回文子串(Medium)
摘要:本文探讨了最长回文子串问题的两种解法。动态规划法通过构建二维数组dp[i][j]记录子串是否为回文,状态转移方程为dp[i][j]=(s[i]==s[j])&&dp[i+1][j-1]。中心扩展法则通过枚举所有可能的回文中心(奇数和偶数长度),向两侧扩展寻找最长回文。两种方法都利用了回文串的特性:首尾字符相同且子串也是回文。动态规划空间复杂度为O(n²),而中心扩展法空间复杂度为O(1)。(149字)原创 2025-09-27 09:18:56 · 895 阅读 · 0 评论 -
LeetCode刷题记录----62.不同路径(Medium)
本文探讨了LeetCode 62题"不同路径"的三种解法。基础解法使用二维动态规划,记录每个格子的路径数,状态转移方程为dp[i][j] = dp[i-1][j] + dp[i][j-1]。优化解法将空间压缩为一维数组,利用dp[j] += dp[j-1]更新状态。最优解法通过组合数学原理,计算移动次数的组合数C(m+n-2,m-1)。三种方法的时间复杂度分别为O(mn)、O(mn)和O(m),空间复杂度依次优化为O(n)和O(1)。文章强调了动态规划的模式识别和状态压缩技巧,以及数学原原创 2025-09-26 10:44:43 · 1310 阅读 · 0 评论 -
LeetCode刷题记录----32.最长有效括号(Hard)
本文介绍了使用动态规划求解最长有效括号长度的方法。关键思路是定义dp[i]为以字符s[i]结尾的最长有效括号长度,并分情况处理')'字符:当遇到"()"时,dp[i]=dp[i-2]+2;当遇到"))"时,若匹配到对应的'(',则dp[i]=dp[i-1]+dp[i-dp[i-1]-2]+2。该算法时间复杂度O(n),空间复杂度O(n)。核心启示是:动态规划中子问题的定义要尽可能简单明确,通过限制条件简化状态转移方程的推导。原创 2025-09-25 10:36:45 · 683 阅读 · 0 评论 -
LeetCode刷题记录----136.只出现一次的数字(Easy)
摘要:题目要求在O(n)时间、O(1)空间内找出数组中仅出现一次的数字。利用异或运算的特性:相同数异或得0,任何数与0异或得本身,且满足交换律。通过遍历数组将所有元素异或,最终结果即为唯一出现一次的数字。该方法高效地满足了题目要求的时间和空间复杂度限制。原创 2025-09-24 10:52:11 · 204 阅读 · 0 评论 -
LeetCode刷题记录----152.乘积最大子数组(Medium)
摘要:该文介绍了用动态规划求解最大乘积子数组问题。关键点在于同时维护两个状态数组:maxF记录到当前位置的最大乘积,minF记录最小乘积。状态转移时考虑三种情况:延续之前的乘积、重新开始或负负得正。最终在maxF数组中取最大值即为答案。算法时间复杂度O(N),空间复杂度O(N)。核心思想是通过同时跟踪最大最小值来处理元素正负带来的影响。原创 2025-09-23 11:32:30 · 462 阅读 · 0 评论 -
LeetCode刷题记录----416.分割等和子集(Medium)
该问题考察将数组分割为两个等和子集的可能性。解题思路:1)首先判断总和是否为偶数;2)转化为0-1背包问题,寻找和为sum/2的子集。通过逐步优化,从回溯法到带记忆的DFS,再到二维DP,最终优化为一维DP。关键点:总和必须为偶数;转化为背包问题;优化空间复杂度时需逆向遍历。最优解使用一维DP数组,时间复杂度O(N*target),空间复杂度O(target)。原创 2025-09-23 11:17:34 · 1560 阅读 · 0 评论 -
LeetCode刷题记录----300.最长递增子序列(Medium)
本文介绍了求解最长递增子序列的动态规划方法。通过定义dp[i]表示以nums[i]结尾的最长子序列长度,初始值设为1。状态转移时,若nums[j]<nums[i](j<i),则更新dp[i]为max(dp[i], dp[j]+1)。最终结果为dp数组中的最大值。该方法时间复杂度为O(n²),空间复杂度为O(n)。关键点在于正确识别状态转移条件(nums[j]<nums[i]),确保子序列严格递增。原创 2025-09-22 11:41:48 · 266 阅读 · 0 评论 -
LeetCode刷题记录----139.单词拆分(Medium)
该题解使用动态规划解决字符串拆分问题。定义dp[i]表示前i个字符能否被字典中的单词拆分。初始化dp[0]为true(空字符串可拆分)。状态转移时,遍历所有可能的分割点j,若dp[j]为true且子串s[j..i-1]在字典中,则dp[i]=true。使用哈希集合存储字典以提高查询效率。时间复杂度O(n^2),空间复杂度O(n)。关键点在于利用已知子问题结果,避免重复计算,通过分割点将问题分解为两个子问题判断。原创 2025-09-22 11:27:34 · 507 阅读 · 0 评论 -
LeetCode刷题记录----322.零钱兑换(Medium)
本文探讨了解决零钱兑换问题的两种主要方法:动态规划和记忆化深度优先搜索。动态规划方法通过构建dp数组,其中dp[i]表示凑到金额i所需的最少硬币数,采用状态转移方程dp[i]=min(dp[i],dp[i-coin]+1)进行求解,时间复杂度为O(NAmount)。优化后的动态规划方案避免了预处理硬币数组,直接通过遍历计算状态值。另一种方法是记忆化DFS,通过递归和剪枝来减少重复计算,同样达到O(NAmount)的时间复杂度。文章强调解决此类问题需明确状态定义和转移方程,当问题可分解为子问题时,动态规划或记原创 2025-09-21 17:36:42 · 1054 阅读 · 0 评论 -
LeetCode刷题记录----279.完全平方数(Medium)
该文探讨了完全平方数问题的两种解法:动态规划和数学优化。动态规划解法通过构建dp数组,记录每个数的最小完全平方数和,时间复杂度O(n√n)。数学优化基于拉格朗日四平方定理,将问题转化为判断数字能否表示为1/2/3/4个平方数之和,时间复杂度降至O(√n)。文章强调了枚举在解决数字相加问题中的重要性,并比较了两种方法的优劣,指出数学方法在效率上的显著优势。原创 2025-09-20 11:31:44 · 631 阅读 · 0 评论 -
LeetCode刷题记录----198.打家劫舍(Medium)
本文讨论了"打家劫舍"问题的动态规划解法。对于一排房屋,每个房屋有两种选择(偷或不偷),决策取决于前一个房屋的状态。建立动态规划数组dp[i]表示偷到第i个房屋的最大金额,状态转移方程为dp[i]=max(dp[i-2]+nums[i], dp[i-1])。算法时间复杂度O(n),空间复杂度O(n)。关键在于识别每个房屋的状态选择及其与前序房屋的关系,从而建立正确的状态转移方程。原创 2025-09-20 11:11:25 · 501 阅读 · 0 评论 -
LeetCode刷题记录----763.划分字母区间(Medium)
【摘要】本文提出两种解决字符串分段问题的算法。第一种采用双遍历法:先统计字母频率,再通过哈希集合动态维护当前片段的字母集合,当集合为空时完成切割。第二种优化为贪心算法:先记录每个字母的最远位置,遍历时动态更新当前能到达的最远位置,到达时进行切割。两种方法时间复杂度均为O(n),但后者空间复杂度优化至O(1)。关键是通过字母的最远位置这一核心特征,将问题转化为类似跳跃游戏的贪心策略。原创 2025-09-19 10:34:45 · 657 阅读 · 0 评论 -
LeetCode刷题记录----45. 跳跃游戏 II(Medium)
摘要:该文介绍了跳跃游戏II的贪心算法解法。通过动态维护最大可达位置maxCanReach和当前跳跃边界end,在遍历数组时,当到达end位置时触发跳跃,更新end为maxCanReach并增加跳跃计数。算法确保每次跳跃都选择最远可达位置,时间复杂度O(n),空间复杂度O(1)。关键点在于及时更新最大可达位置和准确判断跳跃时机。原创 2025-09-19 10:16:38 · 485 阅读 · 0 评论 -
LeetCode刷题记录----55.跳跃游戏(Medium)
本文探讨了跳跃游戏问题的两种解法。初始采用递归回溯法,通过遍历所有可能的跳跃路径判断能否到达终点,但时间复杂度高达O(2^n)。随后提出更优的贪心算法,通过维护最远可达位置maxCanReach,在O(n)时间内解决问题。关键点在于:1)递归回溯法虽可行但效率低;2)贪心算法只需跟踪最远可达位置即可判断结果,避免冗余计算。该问题体现了不同算法在解决同一问题时的效率差异,特别是当仅需判断可行性时,贪心算法往往更高效。原创 2025-09-18 11:06:29 · 474 阅读 · 0 评论 -
LeetCode刷题记录----121.买卖股票的最佳时机(easy)
摘要:本文讨论了股票买卖问题的最优解求法。通过分析暴力解法(O(N^2))和贪心算法(O(N))两种实现,指出贪心算法通过跟踪最低买入价和最大利润来优化效率。代码示例展示了如何用贪心思想在单次遍历中解决问题,强调对于极值类问题应优先考虑贪心策略的优势。原创 2025-09-18 10:50:20 · 243 阅读 · 0 评论 -
LeetCode刷题记录----295.数据流的中位数(Hard)
本文探讨了LeetCode 295题"数据流的中位数"的解题思路。作者首先尝试了两种超时方法:一是使用单一堆结构,每次查询时弹出半数元素计算中位数;二是维护有序列表,每次插入后进行快速排序。随后提出优化方案:采用大小根堆结合的方式,大根堆存储较小半数数据,小根堆存储较大半数数据,保持两堆元素数量平衡。该方法实现插入操作O(logN)时间复杂度和查询O(1)时间复杂度,空间复杂度O(N)。通过堆顶元素即可快速获取中位数,有效解决了数据流中实时计算中位数的问题。原创 2025-09-17 11:46:37 · 573 阅读 · 0 评论 -
LeetCode刷题记录----347.前K个高频元素(Medium)
摘要:本文探讨了在数组中寻找前K个高频元素的三种解法。1)最大堆法:统计频率后构建最大堆,出堆K次获取结果,时间复杂度O(NlogN);2)最小堆法:维护大小为K的最小堆,遍历时保留高频元素,时间复杂度优化至O(NlogK);3)快速选择法:基于快速排序思想,通过基准值分割区间定位前K大元素,平均时间复杂度O(N)。三种方法的空间复杂度均为O(N),其中最小堆法和快速选择法在效率上更具优势。原创 2025-09-17 10:06:04 · 1144 阅读 · 0 评论 -
LeetCode刷题记录----215.数组中的第K个最大元素(Medium)(再做一次)
摘要:文章介绍了两种在数组中查找第K大元素的算法。1.优先队列法:构建最小堆,保持堆大小为K,堆顶即为第K大元素,时间复杂度O(nlogk),空间复杂度O(k)。2.快速选择法:基于快速排序的分治思想,通过基准值定位目标元素位置,平均时间复杂度O(n),最坏O(n²)。两种方法各有适用场景:优先队列适合动态维护,快速选择适合固定长度数组的高效查找。原创 2025-09-16 10:33:04 · 762 阅读 · 0 评论 -
LeetCode刷题记录----215.数组中的第K个最大元素(Medium)
本文通过最大堆实现数组第K大元素查找。首先构建最大堆(从中间节点开始下沉操作),然后执行k-1次删除堆顶元素操作(每次将末尾元素移至堆顶并下沉),最终堆顶即为结果。代码优化将下沉操作提取为独立函数heapSink复用。时间复杂度O((n+k)logn),空间O(1)。作者指出该解法未达最优O(n)复杂度,需用快速选择算法改进。关键收获:1)堆操作的核心是下沉逻辑复用;2)高效实现需采用快速选择而非堆排序。原创 2025-09-15 10:53:18 · 337 阅读 · 0 评论 -
LeetCode刷题记录----84. 柱状图中最大的矩形(Hard)
这篇题解详细分析了求解柱状图最大矩形面积的三种方法:暴力枚举宽度法(O(n²))、暴力枚举高度法(O(n²))和优化的单调栈解法(O(n))。重点介绍了单调栈解法,通过在数组两端添加哨兵值简化边界条件处理,实现了高效计算。核心思路是维护一个单调递增栈,遇到较小元素时弹出栈顶计算面积,最终得到最大矩形面积。该方法巧妙利用了后进先出的特性,将时间复杂度优化至线性级别。原创 2025-09-12 12:16:03 · 1418 阅读 · 0 评论 -
LeetCode刷题记录----739.每日温度(Medium)
本文探讨了求解每日温度问题的三种算法:1.暴力解法(O(n²)时间复杂度,会超时);2.优化暴力解法(利用温度范围特性,O(n)时间);3.单调栈解法(最优解,O(n)时间)。重点分析了单调栈的实现原理:维护递减栈,遇到高温时弹出栈顶并计算天数差。文章强调了利用题目限制条件优化算法的重要性,并指出在需要比较索引和值时,单调栈是一种高效解决方案。原创 2025-09-11 10:59:52 · 1166 阅读 · 0 评论 -
LeetCode刷题记录----394.字符串解码(Medium)
摘要:本文介绍了一种使用栈结构解决字符串解码问题的方法。该算法通过维护字符栈和数字栈,逐个处理输入字符:遇到数字时拼接数字串,遇到'['时将数字压栈,遇到字母直接压栈,遇到']'时弹出字符直到'[',并根据数字栈中的重复次数拼接字符串后重新压栈。最终从字符栈中逆序拼接得到解码结果。该方法时间复杂度O(S),空间复杂度O(S),其中S为解码后字符串长度。关键点在于利用栈的后进先出特性处理嵌套括号,并注意字符拼接顺序。原创 2025-09-10 10:11:31 · 550 阅读 · 0 评论 -
LeetCode刷题记录----155.最小栈(Medium)
本文探讨了实现最小栈的两种方法。第一种使用双向链表结构,维护一个指向当前最小值的指针,在入栈和出栈时动态更新该指针。第二种更简洁的方法是使用两个栈:主栈负责常规操作,辅助栈同步存储当前最小值。两种方法的关键都在于以O(1)时间复杂度获取最小值,同时满足栈的基本操作要求。分析表明,双栈法实现更简洁,两种方法的时间复杂度均为O(1),空间复杂度为O(N)。该问题展示了在数据结构设计中如何通过辅助结构来优化特定操作的性能。原创 2025-09-08 09:50:43 · 810 阅读 · 0 评论 -
LeetCode刷题记录----20.有效的括号(Easy)
本文介绍了使用栈结构解决括号匹配问题的两种方法。第一种方法通过遍历字符串,将左括号入栈,遇到右括号时与栈顶元素匹配,最终检查栈是否为空。第二种方法优化了过程:先排除奇数长度字符串,使用哈希表存储括号对,简化匹配逻辑。两种方法的时间复杂度均为O(N),第二种方法的空间复杂度稍高(O(N+字符集长度))。文章总结了C++中栈的使用技巧,并建议利用哈希表提高代码可读性。核心思路是利用栈的后进先出特性来实现括号的即时匹配。原创 2025-09-07 19:29:52 · 626 阅读 · 0 评论 -
LeetCode刷题记录----4.寻找两个正序数组的中位数(Hard)
【摘要】该算法通过二分查找在两个有序数组中高效寻找中位数。核心思路是将问题转化为查找第k小的元素:1)根据数组总长度奇偶性确定需要查找的元素位置;2)实现getMinKNum函数,通过比较两数组k/2处的值来排除不可能的元素区间;3)使用指针动态调整搜索范围。该方法时间复杂度为O(log(m+n)),空间复杂度O(1)。关键点在于将中位数问题转化为第k小元素查找,并利用二分思想逐步缩小搜索范围,通过指针更新模拟排除过程。原创 2025-09-06 11:51:02 · 1032 阅读 · 0 评论 -
LeetCode刷题记录----153.寻找旋转排序数组中的最小值(Medium)
文章摘要:本文探讨旋转排序数组中寻找最小值的二分查找方法。初始方案通过比较左右区间有序性,记录可能的最小值;优化方案则优先判断右区间有序性,直接收缩边界确保最小值在区间内。两种方法时间复杂度均为O(logN),空间复杂度O(1)。关键点在于:1)利用有序区间特性;2)合理设置边界更新条件。优化方案通过调整判断顺序简化了比较过程,最终收敛点即为最小值。(149字)原创 2025-09-05 10:03:05 · 527 阅读 · 0 评论 -
LeetCode刷题记录----33.搜索旋转排序数组(Medium)
文章摘要:该文介绍了在旋转有序数组中查找目标值的二分查找方法。核心思路是通过比较中间值与边界值来判定有序区间,再判断目标值是否在该区间内来调整搜索范围。算法步骤包括:初始化边界、计算中间值、判断有序区间、调整搜索范围,时间复杂度为O(logN),空间复杂度O(1)。关键点在于识别有序部分并确定目标值所在区间。原创 2025-09-04 10:14:20 · 523 阅读 · 0 评论 -
LeetCode刷题记录----34.在排序数组中查找元素的第一个和最后一个位置(Medium)
本文探讨了使用二分查找算法在有序数组中查找目标值范围的优化方法。初版方案采用常规二分查找找到目标值后线性扩展边界,时间复杂度为O(N)。优化方案通过设计两种二分查找条件:查找第一个大于等于target的索引(left)和第一个大于target的索引(right-1),将时间复杂度降为O(logN)。关键点在于:1) 通过调整二分条件实现不同边界的查找;2) 最终验证left<=right且对应位置均为目标值。该方案充分利用了二分查找的特性,避免了线性搜索,显著提升了效率。原创 2025-09-02 10:33:57 · 636 阅读 · 0 评论 -
LeetCode刷题记录----74.搜索二维矩阵(Medium)
本文提出两种在有序矩阵中查找目标值的二分查找方法。第一种方法将二维矩阵虚拟为一维数组,通过数学转换计算行列索引,时间复杂度O(logmn)。第二种方法利用矩阵特性分两步查找:先用upper_bound定位目标行,再用binary_search在该行查找,时间复杂度O(logm+logn)。两种方法空间复杂度均为O(1)。文章还总结了C++中upper_bound和binary_search的用法差异,以及lambda表达式的语法。原创 2025-09-01 09:33:24 · 516 阅读 · 0 评论 -
LeetCode刷题记录----51.N皇后(Hard)
本文提出了一种基于递归回溯的N皇后问题求解方法。通过维护二维数组记录每个格子被攻击的次数,实现棋盘状态的动态更新。算法按行放置皇后,对每行遍历所有列位置,若未被攻击则放置皇后并更新影响范围,递归处理下一行后回溯撤销影响。时间复杂度为O(N!×N²),空间复杂度O(N²)。文章还分析了斜线位置的更新方法,并指出可通过哈希表进一步优化空间至O(N)。该方案的关键在于正确处理放置皇后时的攻击范围标记和回溯时的状态恢复。原创 2025-08-30 11:18:18 · 974 阅读 · 0 评论 -
LeetCode刷题记录----131.分割回文串(Medium)
本文探讨了分割回文串问题的解法。通过递归回溯枚举所有可能的字符串分割方案,并利用双指针或动态规划优化回文判断。核心思路是:1)递归遍历字符串,逐步构建分割方案;2)当分割出的子串均为回文时保存方案。优化方法包括预处理动态规划数组dp[i][j]记录子串是否为回文,或采用记忆化搜索。算法时间复杂度为O(n·2^n),空间复杂度O(n^2)。解题关键在于将枚举分割方案与高效回文验证相结合。原创 2025-08-29 11:56:35 · 1132 阅读 · 0 评论 -
LeetCode刷题记录----35.搜索插入位置(Easy)
本文介绍了使用二分查找算法在有序数组中定位目标值或确定其插入位置的方法。通过定义左右边界并计算中间索引mid,逐步缩小搜索范围。当找到目标值时返回其索引,未找到时left指针恰好指向应插入的位置。算法时间复杂度为O(logn),空间复杂度O(1)。关键点在于:1)有序数组检索可考虑二分查找;2)未找到目标值时,left指针自动指向正确的插入位置。原创 2025-08-28 20:31:57 · 626 阅读 · 0 评论 -
LeetCode刷题记录----79.单词搜索(Medium)
该文章探讨了在矩阵中搜索单词的深度优先搜索算法。首先通过回溯法在矩阵中匹配单词首字母,然后递归搜索四个方向。初始方案使用访问标记数组,时间复杂度O(mn4^L),空间复杂度O(mn+L)。优化方案包括:1)在原矩阵上标记访问状态;2)预处理检查字符频率。优化后空间复杂度降至O(L)。核心思路是:1)DFS回溯处理矩阵搜索;2)预处理可提前排除无效情况。两种方案的时间复杂度相同,但优化方案显著减少了空间消耗。原创 2025-08-27 10:56:52 · 421 阅读 · 0 评论 -
LeetCode刷题记录----22.括号生成(Medium)
本文探讨了生成所有合法括号组合的算法。通过递归回溯方法,在生成过程中实时判断括号合法性:左括号优先添加,右括号添加需满足剩余右括号数多于左括号数。时间复杂度为卡特兰数级别,空间复杂度O(N)。文章还提出了分治法优化思路,将合法括号分解为(A)B形式,利用动态规划缓存中间结果。此外介绍了暴力生成所有可能再验证合法性的朴素方法。总结指出:1)递归回溯加条件判断能高效解决问题;2)分治法适用于具有可分解结构的问题;3)指针可优化大量容器的存储;4)智能指针有助于内存管理。原创 2025-08-26 11:50:14 · 958 阅读 · 0 评论 -
LeetCode刷题记录----39.组合总和(Medium)
本文介绍了使用回溯算法解决组合总和问题的思路。通过递归遍历候选数组,在每一步选择数字并更新剩余目标值,当目标值减至0时记录有效组合。初始解法时间复杂度为O(n²target),空间复杂度为O(target/m)。优化方案先对数组排序,在递归过程中进行剪枝处理,当剩余目标值小于当前候选数时直接终止该分支,将时间复杂度优化为O(nlogn + KL)。文章强调回溯法适用于寻找所有可能解的问题,建议通过手动排列示例寻找规律,并指出合理剪枝能有效提升算法效率。原创 2025-08-25 10:52:15 · 1123 阅读 · 0 评论
分享