leetcode
仅记录自己刷题通过的结果,不一定是最优解,智商有限,太难的看不懂,这里基本上都是最基础的算法
JHC0000abc
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
392. 判断子序列
摘要: 该问题要求判断字符串 s 是否为字符串 t 的子序列。子序列的定义是通过删除 t 中的某些字符(不改变剩余字符顺序)得到 s。解法使用双指针法:初始化指针 i 和 j 分别遍历 s 和 t,当字符匹配时移动 i,否则仅移动 j。若最终 i 遍历完 s,则返回 True,否则返回 False。时间复杂度为 O(n),适用于常规场景。对于海量 s 查询(如10亿次),可预处理 t 的字符位置信息以优化查询效率。原创 2025-12-24 13:45:19 · 239 阅读 · 0 评论 -
121. 买卖股票的最佳时机
摘要:本文讨论了一个股票买卖问题,要求在给定股价数组中找到最大利润。通过比较直接使用min()/max()函数和条件语句的两种实现方式,发现前者运行时间更长(296ms vs 200ms)。分析表明,虽然两者时间复杂度相同(O(n)),但内置函数调用可能带来额外开销。最优解法是维护最小买入价和最大利润,在一次遍历中完成计算,确保线性时间复杂度。提示部分给出了问题的约束条件和示例说明。原创 2025-12-23 16:31:50 · 429 阅读 · 1 评论 -
119. 杨辉三角 II
本文介绍了如何生成杨辉三角的指定行。题目要求给定非负索引rowIndex,返回杨辉三角的第rowIndex行。杨辉三角的特点是每个数等于其左上方和右上方数之和。作者提供了Python解决方案,通过递归生成完整的杨辉三角后返回指定行。虽然该方法可行,但空间复杂度较高。文章最后提到可以通过优化将空间复杂度降至O(rowIndex),但未给出具体实现。示例显示该方法在测试中获得了较好的性能表现。原创 2025-12-18 19:23:43 · 158 阅读 · 0 评论 -
118. 杨辉三角
本文介绍了一种生成杨辉三角前n行的递归解法。杨辉三角的特点是每个数等于其左上方和右上方数之和。算法采用递归方式:当numRows为1或2时直接返回基础解;否则递归生成前n-1行,再基于最后一行计算新行(相邻元素相加),并在首尾补1。该方法简洁高效,已实现双百性能(100%执行用时和内存击败率)。示例显示输入5时输出正确的5行杨辉三角。该解法适用于1到30行的生成需求。原创 2025-12-18 19:01:47 · 200 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置
该算法使用二分查找在O(log n)时间内找到目标值的起始和结束位置。核心思路是:1)通过二分查找找到target的第一次出现位置start;2)通过查找target+1的位置end,则结束位置为end-1。若start超出数组范围或nums[start]不等于target,说明目标值不存在,返回[-1,-1]。示例验证:对于nums=[5,7,7,8,8,10],target=8时,找到start=3,end=5,返回[3,4];target=6时返回[-1,-1]。该解法高效利用了二分查找的特性,满足题原创 2025-12-04 23:48:55 · 436 阅读 · 0 评论 -
32. 最长有效括号
题目要求找出字符串中最长的有效括号子串长度。给出的Python解法思路如下: 使用栈来匹配括号对,记录所有能组成有效括号对的索引位置 将这些索引排序后,寻找最长的连续递增序列 连续递增序列的长度即为有效括号子串的长度 例如对于输入")()())": 会匹配到索引1-2和3-4的括号对 排序后得到[1,2,3,4] 最长连续序列长度为4(1,2,3,4),对应输出4 该方法时间复杂度为O(n),空间复杂度为O(n)。虽然作者自评代码质量不高,但核心思路是正确的栈应用方法。原创 2025-12-04 18:29:50 · 231 阅读 · 0 评论 -
47. 全排列 II
本文解决了一个给定包含重复数字的序列,返回所有不重复全排列的问题。通过递归和记忆化的方法,将问题分解为子序列的全排列,然后将新元素插入到子序列排列的所有可能位置,利用集合去重确保结果唯一性。算法使用字典缓存中间结果提高效率,最终返回所有可能的唯一排列组合。示例展示了输入[1,1,2]和[1,2,3]时的正确输出结果,验证了算法的有效性。该方法适用于长度不超过8的整数序列。原创 2025-12-01 19:01:41 · 283 阅读 · 0 评论 -
46. 全排列
本文提出了一种递归方法来解决数组全排列问题。算法核心思想是将问题分解为子问题:对于n个数字的全排列,可以看作是在n-1个数字的全排列结果中,将第n个数字插入到所有可能的位置。具体实现时,使用深度拷贝避免修改原列表,并通过递归逐步构建所有排列组合。该方法能正确处理输入数组长度为1的边界情况,最终返回所有可能的排列组合。时间复杂度为O(n!),空间复杂度为O(n!),适用于小规模输入(提示中给出1 ≤ nums.length ≤ 6)。原创 2025-12-01 18:19:07 · 519 阅读 · 0 评论 -
x 的平方根
这道题要求计算非负整数x的算术平方根的整数部分。使用二分查找法,在1到x范围内搜索平方最接近x的整数。通过比较中间值mid的平方与x的大小关系,调整搜索范围。当mid平方小于x时,说明结果在右半区;大于x时在左半区;等于x时直接返回mid。最终返回的l-1即为平方根的整数部分。该方法避免了使用内置函数,时间复杂度为O(logx),适用于大整数情况。原创 2025-12-01 00:07:46 · 453 阅读 · 0 评论 -
【无标题】
该算法解决了电话号码字母组合问题,通过递归合并每个数字对应的字母列表来生成所有可能的组合。首先建立数字到字母的映射字典,然后遍历输入数字字符串,依次将当前数字的字母列表与之前的结果列表进行两两组合。算法处理了空列表的特殊情况,最终返回所有可能的字母组合。虽然算法实现简单,但由于问题规模较小(最多4位数字),其性能表现优异,时间复杂度为O(3^N * 4^M),其中N是3字母数字的个数,M是4字母数字的个数。原创 2025-11-28 21:42:19 · 330 阅读 · 0 评论 -
Z 字形变换
这篇文章介绍了如何将字符串按Z字形排列后进行重新读取。给定字符串s和行数numRows,算法将字符按从上到下、从左到右的Z字形顺序排列,然后按行读取生成新字符串。当numRows为1时直接返回原字符串。算法使用一个列表数组存储每行的字符,通过标志位控制字符的填充方向(向下或斜向上)。最后将各行字符拼接成结果字符串。时间复杂度为O(n),空间复杂度为O(n),适用于字符串长度和行数在合理范围内的情况。原创 2025-11-28 16:30:16 · 180 阅读 · 0 评论 -
合并 K 个升序链表
摘要:本文介绍了如何合并多个已排序的链表为一个升序链表。采用分治策略,通过两两合并的方式逐步整合所有链表。首先定义辅助函数merge_two来合并两个链表,然后在主函数mergeKLists中遍历链表数组,依次合并每个链表。该方法的时间复杂度为O(Nk),其中N是链表总节点数,k是链表数量。适用于处理k≤10^4且总节点数≤10^4的情况,能有效处理空链表等边界条件。原创 2025-11-28 12:36:27 · 327 阅读 · 0 评论 -
交换链表中的节点
本文提出了一种高效的链表节点交换方法,通过一次遍历同时找到正数第k个和倒数第k个节点。算法使用三个指针:n用于遍历链表,s追踪正数第k个节点,f追踪倒数第k个节点。当n移动时,s在到达第k个节点后停止,而f在n超过k个节点后开始移动。这样当遍历完成时,s指向正数第k个节点,f指向倒数第k个节点,只需交换它们的值即可。该方法时间复杂度为O(n),空间复杂度为O(1),比传统两次遍历的方法更高效。原创 2025-11-27 21:48:58 · 233 阅读 · 0 评论 -
删除链表的倒数第 N 个结点
本文介绍了一种使用快慢指针删除链表倒数第n个节点的方法。通过设置虚拟头节点和快慢指针,先让快指针移动n步,然后同时移动快慢指针直到快指针到达末尾,此时慢指针指向要删除节点的前驱节点。该方法时间复杂度为O(n),空间复杂度为O(1),是解决该问题的经典算法。原创 2025-11-27 21:34:14 · 547 阅读 · 0 评论 -
两两交换链表中的节点
该代码实现了链表中相邻节点的两两交换。使用虚拟头节点(dm)简化操作,通过循环遍历链表,每次交换当前节点的后两个节点(node1和node2)。具体步骤是:修改指针指向,先让curr指向node2,再调整node1和node2的next指针完成交换,最后将curr后移两位继续处理后续节点。最终返回dm.next作为新链表的头节点。这种方法在O(n)时间内完成了链表的节点交换,空间复杂度为O(1)。原创 2025-11-27 21:00:46 · 137 阅读 · 0 评论 -
28. 找出字符串中第一个匹配项的下标
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。遍历haystack 然后检查当前剩余未匹配长度,如果小于needle长度 没必要匹配,如果大于needle长度证明有可能找到合适的子串,进入子串判断逻辑,从第二个字符串开始扫描,完全匹配返回True,不匹配返回False。解释:“leeto” 没有在 “leetcode” 中出现,所以返回 -1。解释:“sad” 在下标 0 和 6 处匹配。原创 2025-11-27 20:11:47 · 156 阅读 · 0 评论 -
原地 移除元素
这篇文章描述了一个原地移除数组中特定值的算法问题。给定数组nums和值val,要求在不使用额外空间的情况下移除所有等于val的元素,并返回剩余元素的数量k。解决方案使用双指针法:start指针记录非val元素的插入位置,end指针遍历数组。当遇到不等于val的元素时,将其复制到start位置并移动start指针。最终start即为剩余元素数量。算法时间复杂度O(n),空间复杂度O(1),满足题目要求。原创 2025-11-27 19:42:56 · 269 阅读 · 0 评论 -
删除有序数组中的重复项
这道题要求原地删除已排序数组中的重复元素,并返回新数组的长度。使用双指针法可以高效解决:一个指针(start)指向当前不重复元素的末尾,另一个指针(index)遍历数组。当遇到不同元素时,将start后移并更新该位置的值。最终返回start+1即为去重后的长度。该方法只需一次遍历,时间复杂度O(n),空间复杂度O(1)。例如输入[0,0,1,1,1,2,2,3,3,4],处理过程会逐步将0,1,2,3,4移到数组前五位,返回长度5。原创 2025-11-27 19:25:41 · 328 阅读 · 0 评论 -
罗马数字转整数
该Python代码实现将罗马数字转换为整数的功能。通过定义罗马字符的排序列表和对应数值映射,采用逆向遍历字符串的方式进行比较计算。算法核心是:当当前字符值小于等于前一个字符时累加,否则减去当前值。这种方法有效处理了罗马数字中特殊减法规则(如IV=4,IX=9),通过逆转字符串简化了比较逻辑,最终返回转换后的整数值。原创 2025-11-27 17:37:04 · 126 阅读 · 0 评论 -
盛水最多容器
该算法使用双指针法求解容器最大盛水面积。初始化时,指针分别位于数组首尾。每次计算当前指针构成的容器面积,并与最大值比较更新。然后移动高度较小的指针向内收缩,直到两指针相遇。这种方法避免了暴力枚举的时间复杂度O(n²),优化为O(n)时间复杂度,空间复杂度为O(1)。核心思想是通过每次排除不可能成为最优解的情况,高效地找到最大面积。原创 2025-11-27 16:51:58 · 134 阅读 · 0 评论 -
括号生成(找规律,后一个结果等于前一个结果所有位置插入() 去重后的结果)
这篇文章摘要介绍了使用递归方法生成所有有效的n对括号组合的Python实现。当n为0时返回空列表,n为1时返回基础组合"()"。对于更大的n值,递归调用n-1的结果,然后通过在已有组合的每个可能位置插入"()"来生成新组合,利用集合去重后返回结果列表。该方法通过递归和字符串操作系统地构建所有可能的有效括号组合。原创 2025-11-27 13:21:46 · 260 阅读 · 0 评论 -
最长回文字串(中心扩散算法)
该摘要描述了一个寻找字符串中最长回文子串的Python算法实现。算法采用中心扩展法,首先将字符串转换为插入分隔符的形式,然后遍历每个字符作为中心向两边扩展,寻找最长回文子串。center_extend方法负责执行中心扩展过程,longestPalindrome方法处理输入字符串并返回最终结果。算法最终去除分隔符后返回最长回文子串。该方法时间复杂度为O(n²),空间复杂度为O(n)。原创 2025-11-27 11:17:54 · 117 阅读 · 0 评论 -
LeetCode 种花问题
LeetCode 种花问题原创 2023-02-03 11:03:07 · 158 阅读 · 0 评论 -
最长连续递增序列
leetcode原创 2023-02-02 16:23:40 · 152 阅读 · 0 评论
分享