- 博客(43)
- 收藏
- 关注
原创 动态规划专练:力扣第416、1049题
本文探讨了力扣第416题(分割等和子集)和第1049题(最后一块石头的重量Ⅱ)的解法。对于416题,首先分析了回溯算法(时间复杂度O(2^n))及其剪枝优化,然后详细介绍了动态规划解法(时间复杂度O(n×target)),将其转化为0-1背包问题。对于1049题,同样采用背包问题的思路,通过寻找最接近sum/2的子集和来最小化剩余石头重量。文章还对比了不同解法的性能,包括回溯+记忆化+剪枝的优化版本。最后给出了完整的代码实现和复杂度分析,展示了动态规划在解决这类问题上的优势。
2026-03-27 09:59:25
621
原创 动态规划专练:力扣第96题-不同的二叉搜索树
本文讨论了计算由n个节点组成的二叉搜索树种类数的动态规划解法。关键点在于利用二叉搜索树的中序遍历特性(严格递增序列)和递归结构:根节点为i时,左子树有i-1个节点,右子树有n-i-1个节点。通过动态规划四步法:定义dp[i]为i个节点的种类数,递推公式为所有根节点情况的左右子树种类乘积之和,初始化dp[0]=dp[1]=1,采用双重循环计算。最终给出O(n^2)时间复杂度和O(n)空间复杂度的实现代码。
2026-03-27 09:59:12
163
原创 动态规划专练:力扣第343题-整数拆分
本文探讨了整数拆分的动态规划解法。首先提出基本思路:对于数字n,拆分为a和b后,最大乘积可能是a*b或继续拆分后的乘积。通过递推公式dp[n]=fmax(a,dp[a])*fmax(b,dp[b])实现。初始尝试对半拆分法,但测试发现并非最优解。改进方法采用从中间向两边扩展搜索,时间复杂度接近O(n^2)。最后介绍了力扣官方优化方案,基于数学规律:优先拆分成3和2的组合,时间复杂度降为O(n)。两种方法的空间复杂度均为O(n),后者利用数学性质显著提升了效率。
2026-03-26 10:32:32
115
原创 动态规划专练:力扣第509、70、746题
本文记录了动态规划专项训练的学习过程,重点分析力扣509、70、746三道经典DP题目。作者按照动态规划五部曲(确定dp含义、递推公式、初始化、遍历顺序)解题,详细记录了每道题的解题思路和代码实现。从斐波那契数列的入门解法到爬楼梯问题的最优空间优化,再到最小花费爬楼梯问题的两种不同思路,展现了逐步深入理解DP的过程。特别强调了变长数组初始化的注意事项,并比较了递归和迭代解法的差异。通过这三道基础DP题的系统训练,作者初步掌握了动态规划的基本解题框架。
2026-03-26 10:32:17
783
原创 刷题笔记:力扣第91、93题(全排列)
本文分析了力扣第91题(解码方法)和第93题(复原IP地址)的解题思路。第91题采用递归解法会超时,最优解是动态规划,通过判断字符是否为0和组合数字是否合法来计算解码方法数,时间复杂度O(n)。第93题使用DFS回溯法,通过判断IP段的合法性和处理前导零来生成所有可能的IP地址组合,时间复杂度O(1)。文章指出,需要输出具体组合时用DFS,只需统计组合数时用DP。两题都体现了对特殊情况的处理技巧,如首位为0、连续0等边界条件的判断。
2026-03-25 10:01:43
366
原创 刷题笔记:力扣第71题-简化路径
本文探讨了路径简化问题的两种解法。初始思路是直接遍历字符串处理不同情况,但存在无法处理连续"/../"等问题。正确解法应采用栈结构:1)使用strtok按"/";分割路径;2)遇到"."忽略,".."则出栈,其他目录名入栈;3)最后拼接栈中元素。优化建议包括:用malloc代替calloc,指针操作替代strcat提升效率。还提供了纯字符操作的优化实现,通过统计连续点和斜杠进行特殊处理,本质上仍是栈思想的应用。两种方法时间复杂度均
2026-03-24 10:47:25
519
原创 刷题笔记:力扣第58题-最后一个单词的长度
本文介绍了两种计算字符串最后一个单词长度的算法。第一种正向遍历方法:先跳过末尾空格,然后从头遍历到处理后的末尾位置,遇到空格重置计数器,遇到字母则累加。时间复杂度O(n)。第二种反向遍历方法:直接从末尾跳过空格后向前统计字母数量直到遇到空格或开头,效率更高。两种方法空间复杂度均为O(1)。反向遍历算法是更优解,实际运行时间通常小于正向遍历。两种方法都正确处理了末尾空格的情况,保证了结果的准确性。
2026-03-24 10:46:21
146
原创 刷题笔记:力扣第43、67题(字符串计算)
本文解析了两道力扣字符串运算题。第43题"字符串相乘"采用竖式乘法思想,通过双重循环逐位相乘并处理进位,避免了大数溢出问题,时间复杂度O(len1×len2)。第67题"二进制求和"借鉴链表加法思路,从末位开始逐位相加处理进位,优化版本使用三目运算合并分支,最后翻转结果字符串。两题均需特殊处理"0"输入情况,时间复杂度均为线性,是字符串运算的标准解法。
2026-03-23 09:35:50
475
原创 刷题笔记:力扣第38题-外观数列
本文介绍了一种使用迭代方法解决"计数和说"问题的C语言实现。算法通过for循环进行n-1轮迭代,每轮对当前字符串进行行程长度编码(RLE),将重复字符的次数和值写入新字符串。关键点包括:1)使用两个指针分别遍历和填充;2)预先分配足够内存(5000字节);3)使用strcpy安全复制字符串。时间复杂度为O(N×L),空间复杂度为O(L)。文中还提到可用查表法(预处理30种情况)来优化性能,以空间换时间。注意事项包括正确计数方法、内存管理和字符串操作的选择。
2026-03-23 09:35:37
151
原创 刷题笔记:力扣第28题-找出字符串中第一个匹配项的下标
本文介绍了字符串匹配问题的两种解法。首先介绍了暴力匹配法,通过双重循环逐个比较字符,时间复杂度为O(N×M),包含边界条件处理和剪枝优化。然后重点讲解了KMP算法,利用预先计算的pi数组(最长相同前后缀长度)来优化匹配过程,主串指针不回退,仅调整模式串位置,将时间复杂度降至O(N+M)。文章详细说明了pi数组的构建过程和使用方法,强调KMP算法的精妙之处在于利用已匹配信息减少不必要的比较。建议通过视频讲解深入理解KMP原理,并通过练习掌握该算法。
2026-03-22 10:51:39
177
原创 刷题笔记:力扣第20、22题(括号问题)
本文详细分析了两道力扣括号相关题目的解法优化过程。第20题使用栈结构判断括号有效性,通过数组模拟栈操作,时间复杂度O(n)。第22题采用回溯法生成有效括号组合,初始版本使用全局变量导致效率较低,经优化后:1) 改用函数参数替代全局变量提升访问速度;2) 利用函数调用栈自动回溯;3) 精确计算内存分配;4) 使用calloc自动补'\0';5) 简化条件判断逻辑。最终版本通过参数传递路径长度等优化手段,实现了算法效率的显著提升。两题均展示了从基础解法到最优解的系统优化思路。
2026-03-22 10:51:24
872
原创 刷题笔记:力扣第17题-电话号码的字母组合
本文介绍了一种使用递归回溯算法解决电话号码字母组合问题的方案。通过定义数字到字母的映射表(vis)和对应字母数量表(visLen),采用深度优先搜索遍历所有可能的字母组合。算法核心包括递归终止条件判断和回溯循环处理,通过维护path数组记录当前组合,最终将所有有效组合存入结果数组。该方案时间复杂度为O(3^m×4^n),空间复杂度为O(len),其中m对应3字母数字个数,n对应4字母数字个数,是此类问题的最优解法。
2026-03-21 10:00:44
167
原创 刷题笔记:力扣第12、13题(罗马数字)
本文介绍了力扣第12题和第13题的解题思路。第12题将整数转换为罗马数字,采用贪心算法,通过预定义的哈希表从大到小匹配数值,时间复杂度O(1)。第13题将罗马数字转换为整数,利用数组模拟哈希表存储字符对应值,通过判断相邻字符大小关系确定加减规则,时间复杂度O(n)。两题均通过合理利用哈希表实现高效转换,其中第12题需注意字符串初始化,第13题需处理特殊减法规则。两种转换方法均达到最优复杂度。
2026-03-21 10:00:32
328
原创 刷题笔记:力扣第8题-字符串转换整数(atoi)
本文探讨了字符串转整数的算法实现,分析了初始方案存在的问题并给出优化方案。初始代码使用从右向左计算导致溢出,且使用了低效的pow运算。优化后采用从左向右的秦九韶算法(res=res*10+当前数字),使用INT_MAX/MIN宏处理边界,时间复杂度O(n)。最终方案通过提前判断(num>INT_MAX/10)来预防溢出,比力扣标准答案更易理解。核心要点包括:跳过前导空格、处理符号位、逐位累加时的溢出预判以及符号应用。两种实现方式都达到了线性时间复杂度和常数空间复杂度。
2026-03-20 11:02:38
170
原创 刷题笔记:力扣第6题-Z字形变换
本文分析了Z字形字符串转换算法的实现过程。首先发现字符串具有周期性,周期长度为2*行数-2。通过逐行扫描,在非首尾行时额外获取斜向字符。初始实现存在两个问题:结果数组使用栈内存导致指针失效,以及行数为1时的处理不当。修正后使用堆内存分配并优化边界条件处理。最终算法时间复杂度为O(n),空间复杂度O(n)。对比最优解发现,提前边界判断、优化计算公式和条件分支拆分可以进一步提升性能。核心思想是利用周期性规律按行填充字符,避免生成完整Z字形结构。
2026-03-20 11:02:25
525
原创 刷题笔记:力扣第3题-无重复字符的最长子串
本文探讨了求解最长无重复字符子串的算法优化过程。初始方案使用双重循环和标记数组,但存在时间复杂度O(n²)和逻辑错误问题。优化后采用滑动窗口算法:右指针持续右移直至重复,左指针每次右移一位并释放对应字符标记。最终方案时间复杂度O(n),空间复杂度O(1),通过预存字符串长度和单次遍历实现高效求解。关键改进包括消除重复计算、保持右指针单向移动、用指针差值直接计算窗口长度。
2026-03-19 10:29:58
270
原创 刷题笔记:力扣第81题-搜索旋转排序数组Ⅱ
本文探讨了旋转排序数组中存在重复元素时的搜索问题。与无重复元素的33题不同,重复元素会导致二分法无法判断哪边有序。解决方案是在二分前先去除连续重复元素:通过移动左右指针跳过重复值。去重后,数组至少存在一个不同元素,可正常判断有序区间进行二分搜索。算法时间复杂度一般为O(logn),最坏情况(全重复元素)为O(n)。文中还提供了简化版去重方法:当左右中三点值全相同时,同时移动左右指针缩小区间。
2026-03-19 10:29:39
102
原创 刷题笔记:力扣第80题-删除有序数组中的重复项Ⅱ
本文介绍了力扣第80题"删除有序数组中的重复项II"的两种解法。第一种采用快慢指针,统计元素出现次数并最多保留2次,时间复杂度O(n),空间复杂度O(1)。第二种优化解法从第3个元素开始遍历,通过比较当前元素与新数组前前一个元素来判断是否保留,简化了逻辑。两种方法都满足题目要求,其中优化后的解法代码更简洁,只需判断nums[i]与nums[curIndex-2]是否相同即可决定保留与否。
2026-03-18 10:26:16
109
原创 刷题笔记:力扣第78、79、90题(子集查找)
本文介绍了力扣三道回溯算法题目的解题思路和优化方法。78题使用递归生成所有子集,时间复杂度O(n×2ⁿ);79题通过DFS在二维矩阵中搜索单词,优化后省去标记数组;90题在78题基础上加入去重逻辑,处理重复元素的子集问题。文章重点分析了递归模板设计、剪枝优化和位运算技巧,比较了不同解法的优缺点,并提供了标准解法和优化后的代码实现。对于回溯问题,建议掌握递归参数设计、终止条件和单层逻辑的通用模板,同时注意空间优化和去重处理。
2026-03-18 10:25:59
810
原创 刷题笔记:力扣第75题-颜色分类
本文探讨了颜色排序问题的两种解法。第一种直接使用qsort函数快速排序,虽然简单但不够高效。第二种采用双指针法:设置左指针标记0的边界,右指针标记2的边界,遍历指针处理当前元素。遇到0时与左指针交换并右移,遇到2时与右指针交换(此时遍历指针不移动),遇到1则跳过。这种方法只需一次遍历即可完成排序,时间复杂度O(n)。关键点在于处理2时需要重新检查交换后的元素,而循环条件必须包含等于以确保最后一个元素被处理。
2026-03-17 09:51:56
144
原创 刷题笔记:力扣第73、74题(二维矩阵)
本文介绍了力扣两道矩阵相关题目的解法。第73题要求原地将矩阵中0元素所在行列置零,解法是使用矩阵首行首列作为标记数组,分步骤处理:先检查首行首列是否有0,再用剩余区域标记需置零的行列,最后处理标记和首行首列。时间复杂度O(mn),空间复杂度O(1)。第74题要求在有序矩阵中搜索目标值,给出两种解法:线性搜索法先确定目标行再线性查找,时间复杂度O(m+n);二分法先二分查找目标行再二分查找目标列,时间复杂度O(logm+logn)。还介绍了一种将矩阵视为一维数组的优雅二分查找方法。两种解法都需注意边界条件处理
2026-03-17 09:51:38
340
原创 动态规划专练:力扣第63、64、62题
本文总结了力扣动态规划系列题目(62-64题)的解题思路。对于不同路径问题(62题),采用一维DP数组优化空间,时间复杂度O(mn),空间复杂度O(n)。不同路径II(63题)增加了障碍物条件,通过动态规划处理障碍物格子,同样使用空间优化解法。最小路径和(64题)则转换为求最小路径值问题,采用类似方法分情况处理边界条件。三题均遵循动态规划四部曲:明确DP含义、推导状态转移方程、初始化边界条件、确定遍历顺序。通过滚动数组技术将空间复杂度从O(mn)降至O(n),体现了动态规划在路径类问题中的高效性和优化技巧。
2026-03-16 10:39:19
240
原创 刷题笔记:力扣第56、57题(数组区间操作)
本文探讨了力扣第56题和第57题的区间合并与插入算法优化。对于第56题,初始采用标记数组法时间复杂度较高(O(n*10^4)),改进后采用先排序再遍历的方法,时间复杂度降至O(nlogn)。进一步优化通过使用栈内存变量tmp代替堆内存访问,以及局部变量resTop减少指针解引用,显著提升运行速度。第57题作为变种,采用类似思路处理插入区间:先跳过左侧不重叠区间,合并重叠区间,最后处理右侧剩余区间,时间复杂度O(n)。文章强调了边界条件处理和数组越界防护的重要性,建议优先使用栈内存操作以提高性能。优化后的算法
2026-03-16 10:39:05
1001
原创 刷题笔记:力扣第54、59题(螺旋矩阵)
本文分析了力扣54题(螺旋矩阵)和59题(螺旋矩阵Ⅱ)的解题思路。核心算法采用"边界收缩+方向切换"策略:通过维护上下左右四个边界,按顺时针方向依次遍历矩阵外围元素,每完成一个方向的遍历就收缩对应边界。时间复杂度均为O(m×n)或O(n²)。54题解法通过行列坐标移动和方向反转实现螺旋遍历;59题则采用类似方法按顺序填充数字。关键点在于正确处理边界条件和循环终止条件,避免遗漏元素或死循环。两题都展示了如何通过控制边界变量来系统地遍历二维矩阵。
2026-03-15 09:28:00
140
原创 刷题笔记:力扣第53题-最大子数组和
本文介绍了求解最大子数组和的两种算法:贪心算法和分治法。贪心算法通过一次遍历数组,维护当前子数组和和全局最大值,时间复杂度为O(n),空间复杂度为O(1)。当遇到负数和时丢弃前面子数组,确保获得最大和。分治法采用递归思想,将数组二分后合并左右子区间状态,计算包含中间点的最大和,时间复杂度为O(nlogn)。两种方法各有特点,贪心算法效率更高,而分治法体现了重要的递归思想。
2026-03-15 09:27:40
189
原创 刷题笔记:力扣第49题-字母异位词分组
本文探讨了解决字符串异构词分组问题的优化过程。最初采用双重循环比较法(时间复杂度O(n²×L)),但因全局变量污染导致测试失败,后改用局部变量解决。最终采用哈希表优化方案,利用UTHash库实现高效分组:1)将每个字符串排序后作为哈希键;2)动态扩容存储索引;3)最终时间复杂度优化至O(nLlogL)。文章详细介绍了从初始思路到最终优化的完整过程,包括哈希表实现原理和动态内存管理技巧,为解决类似问题提供了清晰的技术路线。
2026-03-13 10:19:03
310
原创 刷题笔记:力扣第48题-旋转图像
本文探讨了如何在不使用额外矩阵的情况下原地旋转n×n矩阵90度。通过分析发现,矩阵旋转可以通过分组覆写实现,每组四个元素形成一个循环覆写环。作者从数学角度推导出坐标变换公式,提出分层遍历的解决方案:外层循环控制层数,中层循环处理每层上边元素,内层循环完成四个位置的循环交换。关键突破在于发现需要逆时针寻找下一个覆写位置,最终实现了时间复杂度O(n²)、空间复杂度O(1)的最优解。该算法通过坐标变换公式(matrix[i][j] = matrix[matrixSize-1-j][i])和四步循环交换,有效解决了
2026-03-13 10:18:46
263
原创 刷题笔记:力扣第46、47题
本文探讨了力扣第46题(全排列)和第47题(全排列Ⅱ)的两种解法。第一种基于字典序算法,通过排序、交换和反转元素来生成所有排列,时间复杂度为O(n!×n)。第二种采用回溯算法,使用标记数组避免重复选择,并通过双重去重处理重复元素。两种方法均能有效解决排列问题,字典序法适用于所有情况,而回溯法则更直观但需要额外处理重复元素。文章详细解析了两种算法的实现逻辑和代码细节,为全排列问题提供了完整的解决方案。
2026-03-12 09:25:54
938
原创 刷题笔记:力扣第45、55题(贪心算法)
本文介绍了力扣第45题和第55题跳跃游戏问题的两种解法。第45题跳跃游戏Ⅱ通过逆向思维(O(n²))和贪心算法(O(n))两种方法解决,贪心算法通过记录当前能跳的最远位置大幅提升效率。第55题跳跃游戏同样采用贪心算法,通过实时更新最远可达位置来判断能否到达终点,时间复杂度为O(n)。两题都展示了贪心算法在优化跳跃类问题中的高效性,将时间复杂度从指数级降至线性级别。
2026-03-12 09:25:32
165
原创 刷题笔记:力扣第39、40题(回溯算法)
本文介绍了力扣第39题和第40题的组合总和问题解法。第39题使用回溯算法,通过递归深度搜索所有可能的组合,包含基本回溯模板和优化后的提前剪枝版本(排序后跳过无效递归)。第40题在第39题基础上增加两个约束:元素不可重复使用和结果去重,通过排序后同层去重和递归时传递i+1实现。两题都采用了全局变量存储中间状态,并遵循回溯算法的标准流程:做出选择→递归→撤销选择。文章详细说明了代码实现思路,包括内存分配、终止条件和剪枝优化等关键点。
2026-03-11 09:31:48
306
原创 刷题笔记:力扣第36题-有效的数独
本文比较了两种数独有效性验证的算法实现。第一种采用暴力解法,通过三次独立循环分别检查行、列和3×3宫格,使用标记数组判断重复元素。第二种是官方优化方案,通过定义三个二维数组(行、列、宫格)在一次双重循环中完成所有检查,利用空间换时间策略简化代码。两种方法核心思路相同,但官方方案更简洁高效,通过计算宫格索引公式(i/3)*3+(j/3)实现同步验证。最终都返回布尔值表示数独是否有效。
2026-03-11 09:31:18
133
原创 刷题笔记:力扣第33、34题(双指针)
本文探讨了力扣第33题和第34题的二分查找解法。第33题要求在旋转排序数组中搜索目标值,通过比较中间值与左右边界来判断有序区间,逐步缩小搜索范围。第34题需在排序数组中查找元素的起止位置,通过两次二分查找分别确定左右边界,避免线性扫描的低效。两题均采用二分法的变种,时间复杂度为O(logn),其中第34题特别处理了全数组相同元素的极端情况。文章详细分析了算法思路,并提供了优化后的代码实现。
2026-03-10 10:06:59
334
原创 刷题笔记:力扣第31题-下一个排列
本文探讨了如何寻找给定排列的下一个更大排列的算法问题。通过分析排列变化规律,发现关键在于从后向前找到第一个升序点i,然后在后面降序部分找到第一个大于nums[i]的数进行交换,最后将i+1后的元素排序。文章给出了两种实现方案:一种使用qsort排序,另一种优化为双指针反转法(将降序部分反转即升序)。后者时间复杂度O(n),空间复杂度O(1),是最优解。核心思路是:找升序点→交换→反转后缀,确保得到比当前大的最小排列。当整个数组降序时,直接反转得到最小排列。
2026-03-10 10:06:34
185
原创 刷题笔记:力扣第18题-四数之和
本文总结了四数之和问题的解题思路与优化方法。初始错误解法是将双指针固定在数组两端导致漏解,正确解法应固定两个指针在左侧,另两个指针在右侧移动。关键点包括:1)排序后使用双指针;2)去重处理;3)使用long long防止溢出;4)动态扩容解决内存问题。优化方案包括预分配内存和剪枝策略(提前计算极值排除无效循环)。文章还推导出N数之和的通用模板:固定前N-2个指针+双指针+分层剪枝。时间复杂度为O(n³),是此类问题的标准解法。
2026-03-09 10:25:03
585
原创 刷题笔记:力扣第15、16题(排序+双指针)
本文总结了力扣第15题(三数之和)和第16题(最接近的三数之和)的解题思路。对于三数之和问题,作者经历了三重循环暴力解法、排序去重优化、最终采用排序+双指针的O(n²)解法,详细说明了内存分配、去重处理等关键点。最接近的三数之和问题借鉴了类似思路,通过排序后使用双指针逐步逼近目标值,重点阐述了初始化、距离比较和指针移动的逻辑。两题都强调了排序的重要性以及处理重复值的技巧,展现了从基础解法到优化解法的完整思考过程。
2026-03-09 10:24:39
1114
原创 刷题笔记:力扣第11题-盛最多水的容器
本文探讨了求解容器最大面积问题的优化方法。初始采用双for循环(O(n²))被弃用,转而使用双指针法。首次实现时仅固定一端移动另一端,导致遗漏中间解。改进后采用核心策略:比较左右指针高度,移动较短的一侧指针,确保不漏解。当高度相等时,移动任意指针均不影响最优解获取。最终方案时间复杂度优化至O(n),通过动态调整指针高效找到最大面积。关键点在于理解:面积由短板高度和宽度决定,移动短边才有可能获得更大值。
2026-03-08 09:42:23
44
原创 刷题笔记:力扣第88题-合并两个有序数组
本文探讨了合并两个有序数组的三种解法。第一种采用类似插入排序的方法,时间复杂度为O(m*n);第二种使用双指针和辅助数组,时间复杂度优化至O(m+n),但需要额外空间;第三种解法同样使用双指针,但从数组末尾开始合并,既保持了O(m+n)的时间复杂度,又实现了O(1)的空间复杂度。关键思路在于:当nums1元素已遍历完时,只需处理nums2剩余元素,因为nums1剩余元素已在正确位置。这些方法展示了算法优化中时间与空间复杂度的权衡。
2026-03-08 09:41:41
46
原创 刷题笔记:力扣第66题-加一
本文探讨了数组加一问题的两种解法。初始方法通过将数组转换为整数加一后再转换回数组,但遇到大数溢出问题。改进方案直接在数组上模拟进位操作:从末位开始加一,若产生进位则前一位继续处理,若所有位都进位则数组长度加一。官方解法优化了这一思路,通过识别连续9的特殊情况简化处理流程:遇到9则置0,非9位加一并终止,最后根据首位是否为0判断是否需要扩容。两种方法都避免了数值溢出风险,后者更高效地处理了边界情况。
2026-03-07 09:28:57
48
原创 刷题笔记:力扣第35题-搜索插入位置
本文探讨了在有序数组中查找插入位置的二分查找算法实现。作者首先尝试了基于单指针的二分法,但由于区间更新错误导致程序超时。通过分析发现问题在于整除运算导致索引停滞,以及缺乏明确的区间收敛逻辑。随后提出正确的双指针解法:初始化左右指针为数组边界,通过计算中点不断缩小区间范围,当找到目标值时直接返回中点索引,否则根据比较结果调整左右边界。最终未找到目标值时,左指针即为插入位置。该算法时间复杂度为O(logn),通过左右指针的精确调整确保了搜索效率。
2026-03-07 09:28:16
47
原创 刷题笔记:力扣第26、27题(快慢指针)
本文总结了力扣26题(删除有序数组重复项)和27题(移除元素)的快慢指针解法。对于26题,初始方案通过标记重复元素为999再排序,时间复杂度为O(nlogn);优化方案使用快慢指针,快指针遍历数组,慢指针记录非重复元素位置,时间复杂度降至O(n)。27题同样采用快慢指针,快指针扫描数组,慢指针保留非目标值元素。两题都体现了快慢指针在处理数组原地修改问题中的高效性,将时间复杂度优化至线性。
2026-03-06 10:18:03
485
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅