- 博客(97)
- 收藏
- 关注
原创 【分治-4】4.寻找两个正序数组的中位数
给定两个正序数组nums1和nums2,需在O(log(m+n))时间内找出它们合并后的中位数。通过二分查找思想,将问题转化为寻找第k小元素,每次排除不可能包含中位数的部分,逐步缩小搜索范围,最终实现高效求解。
2026-09-30 14:57:44
224
原创 【分治-3】347.前K个高频元素
本文介绍了三种求解数组中频率前k高元素的方法:1)哈希表+小根堆,时间复杂度O(n log k),适合一般场景;2)桶排序,时间复杂度O(n),空间换时间,适用于频率范围有限的情况;3)快速选择,平均O(n),最坏O(n²),适合对性能要求高的场景。推荐使用小根堆法,平衡效率与实现难度。
2026-09-30 14:41:22
155
原创 【分治-2】215.数组中的第K个最大元素
题目要求在O(n)时间复杂度内找到数组中第k个最大的元素。可采用快速选择算法,基于快速排序的分区思想,随机选择基准值,通过分区将数组分为大于和小于基准的部分,根据k与分区位置的关系递归处理对应部分,平均时间复杂度为O(n),满足题目要求。
2026-09-30 11:02:54
197
原创 【分治-1】169.多数元素
给定非空数组nums,其中存在多数元素(出现次数大于⌊n/2⌋)。可通过哈希表统计各元素出现次数,返回计数超过⌊n/2⌋的元素。也可使用摩尔投票法:遍历数组,维护候选元素与计数,最终剩余者即为多数元素。时间复杂度O(n),空间复杂度O(1)。
2026-09-29 20:24:42
197
原创 【队列-2】406.根据身高重建队列
按身高从高到低排序,相同身高者按前面人数升序排列。依次将每个人插入结果队列中,位置由其前面应有身高≥自己的人数决定。由于从高到低处理,插入时已排好序的人身高均≥当前人,只需根据ki确定插入位置。时间复杂度O(n²),空间复杂度O(1)。
2026-09-29 19:55:33
322
原创 【二分查找-2】34.在排序数组中查找元素的第一个和最后一个位置
题目要求在非递减排序数组中查找目标值的起始和结束位置,时间复杂度需为O(logn)。可使用二分查找两次:第一次找左边界(首个不小于target的位置),第二次找右边界(首个大于target的位置)。若未找到,返回[-1,-1]。通过调整二分查找的条件实现精准定位,确保高效求解。
2026-09-29 16:52:09
266
原创 【二分查找-1】33.搜索旋转排序数组
题目要求在旋转排序数组中以O(log n)时间复杂度查找目标值。由于数组原为升序且在某点旋转,可利用二分查找:每次判断中点所在区间是否有序,进而确定目标值可能在左半或右半。通过比较nums[0]与mid、target的大小关系,调整左右边界,最终找到target下标或返回-1。
2026-09-27 17:58:12
202
原创 【双指针-6】75.颜色分类
使用三指针法原地排序:设left指向0的右边界,right指向2的左边界,i为当前遍历指针。遍历时,若nums[i]=0,与left交换并移动left和i;若nums[i]=2,与right交换并仅移动right;若nums[i]=1,直接移动i。确保0、1、2依次排列,时间复杂度O(n),空间复杂度O(1)。
2026-09-27 17:41:08
280
原创 【双指针-5】31.下一个排列
找出数组的下一个字典序排列,需原地修改且仅用常数空间。思路:从右往左找第一个递减位置i,再从右往左找第一个大于nums[i]的元素j,交换i、j;最后将i+1到末尾部分反转(升序排列)。若无递减点,则整个数组反转为最小排列。时间复杂度O(n),空间复杂度O(1)。
2026-09-27 16:33:36
239
原创 【二叉树-14】124.二叉树中的最大路径和
本题要求找出二叉树中路径和最大的路径。路径可不经过根节点,且每个节点至多出现一次。采用深度优先搜索(DFS),对每个节点返回以该节点为起点向下的最大单边路径和(包含自身),同时更新全局最大路径和。最大路径和可能出现在左子树、右子树或跨越当前节点的左右子树与当前节点的组合中。通过递归计算并维护全局最优解,最终返回最大路径和。时间复杂度O(n),空间复杂度O(h),其中n为节点数,h为树高。
2026-09-26 08:42:54
286
原创 【二叉树-13】538.把二叉搜索树转换为累加树
本题要求将二叉搜索树转换为累加树,使每个节点值变为原值加上所有大于它的节点值之和。利用二叉搜索树的性质,采用反向中序遍历(右→根→左),维护一个累计和变量,依次更新每个节点的值,确保每个节点在遍历时已知所有更大节点的总和。时间复杂度O(n),空间复杂度O(h),其中h为树的高度。
2026-09-25 10:19:13
192
原创 【二叉树-12】437.路径总和 III
本题要求统计二叉树中节点值之和等于目标值targetSum的路径数目,路径方向必须向下(父到子),且无需从根或到叶。解法采用深度优先搜索(DFS),对每个节点作为起点,递归计算以该节点为起点的路径和是否等于targetSum。通过遍历所有可能的起点,并在每条路径上累加节点值,统计满足条件的路径数。时间复杂度为O(n²),空间复杂度为O(h),其中n为节点数,h为树高。
2026-09-25 10:02:03
189
原创 【二叉树-11】236.二叉树的最近公共祖先
给定二叉树中两个节点p、q,求其最近公共祖先(LCA)。根据定义,LCA是同时为p、q祖先且深度最大的节点,可为自身。解法采用递归:若当前节点为p或q,返回该节点;否则在左右子树中分别查找,若左右均找到,则当前节点即为LCA;若仅一侧有结果,则返回该侧结果。时间复杂度O(n),空间复杂度O(h)。
2026-09-25 09:30:32
207
原创 【二叉树-10】114.二叉树展开为链表
将二叉树展开为单链表,需保持先序遍历顺序。通过递归或迭代方式,将左子树移到右子树位置,并将原右子树接在新链表末尾。核心思想是:先处理根节点,再递归展开左右子树,最后合并。时间复杂度O(n),空间复杂度O(h),h为树高。
2026-09-25 09:11:40
383
原创 【二叉树-9】105.从前序与中序遍历序列构造二叉树
根据先序遍历和中序遍历构造二叉树:先序遍历首元素为根节点,从中序遍历中找到该根节点位置,划分左右子树。递归构建左子树(先序左段,中序左段)和右子树(先序右段,中序右段),直至遍历完成。时间复杂度O(n),空间复杂度O(n)。
2026-09-25 08:24:18
281
原创 【二叉树-8】102.二叉树的层序遍历
采用广度优先搜索(BFS),使用队列逐层遍历二叉树。初始化队列并加入根节点,每层遍历时记录当前层所有节点值,将其子节点依次入队。遍历完一层后,将该层结果加入最终列表。时间复杂度O(n),空间复杂度O(n)。
2026-09-24 09:52:18
148
原创 【二叉树-7】98.验证搜索二叉树
判断二叉搜索树有效性需确保每个节点的左子树所有值严格小于该节点,右子树所有值严格大于该节点,且左右子树也均为有效二叉搜索树。可通过中序遍历验证是否为严格递增序列,或用递归传递上下界范围,检查每个节点是否在合法范围内。时间复杂度O(n),空间复杂度O(h)(h为树高)。
2026-09-24 09:29:04
89
原创 【二叉树-6】617.合并二叉树
合并两棵二叉树,从根节点开始递归处理。若两节点均存在,值相加;若仅一个存在,直接使用非空节点。通过深度优先遍历实现合并,返回新树的根节点。时间复杂度O(min(m,n)),空间复杂度O(min(m,n))。
2026-09-24 08:33:01
237
原创 【二叉树-5】543.二叉树的直径
二叉树的直径是任意两节点间最长路径的边数。可通过深度优先搜索(DFS)计算每个节点左右子树的最大深度,更新全局最大值为左右深度之和。递归过程中返回当前节点的最大深度,最终得到整棵树的直径。时间复杂度O(n),空间复杂度O(h)。
2026-09-24 07:52:37
152
原创 【二叉树-4】226.翻转二叉树
翻转二叉树即交换每个节点的左、右子树。可通过递归或迭代实现:递归法中,先翻转左右子树,再交换当前节点的左右孩子;迭代法使用栈或队列遍历节点并交换子树。时间复杂度O(n),空间复杂度O(h),h为树高。
2026-09-23 10:39:06
553
原创 【二叉树-3】104.二叉树的最大深度
二叉树的最大深度为根节点到最远叶子节点的最长路径上的节点数。可通过递归求解:若节点为空,深度为0;否则深度为左右子树最大深度加1。时间复杂度O(n),空间复杂度O(h),h为树高。
2026-09-23 10:24:22
160
原创 【二叉树-2】101.对称二叉树
检查二叉树是否轴对称,需比较左子树与右子树是否镜像。使用递归方法,定义一个辅助函数判断两棵树是否镜像:若两节点值相等,且左树的左子树与右树的右子树镜像,左树的右子树与右树的左子树镜像,则为对称。时间复杂度O(n),空间复杂度O(h)(h为树高)。
2026-09-23 10:08:16
249
原创 【二叉树-1】94.二叉树的中序遍历
返回二叉树中序遍历结果。中序遍历顺序为:左子树 → 根节点 → 右子树。可通过递归或迭代实现。递归方法简洁,先遍历左子树,访问根节点,再遍历右子树。时间复杂度O(n),空间复杂度O(h),h为树高。
2026-09-23 09:52:50
249
原创 【队列-1】239.滑动窗口最大值
给定数组nums和窗口大小k,需返回滑动窗口每次移动后内部最大值。使用双端队列维护可能成为最大值的元素索引,确保队首始终为当前窗口最大值。遍历数组,移除超出窗口范围及小于当前元素的队尾元素,插入新元素索引。队首即为当前窗口最大值。时间复杂度O(n),空间复杂度O(k)。
2026-09-23 08:31:30
174
原创 【栈-5】84.柱状图中最大的矩形
给定柱状图高度数组,求最大矩形面积。使用单调栈方法:遍历每个柱子,维护递增栈,当当前高度小于栈顶时,弹出栈顶并计算以该高度为高的矩形面积,更新最大值。最终返回最大面积。时间复杂度O(n),空间复杂度O(n)。
2026-09-21 22:03:35
203
原创 【栈-4】739.每日温度
给定温度数组,返回每个位置到下一个更高温度的天数。若之后无更高温度,则用0表示。可通过单调栈实现:遍历数组,维护递减温度的索引栈,遇到更高温度时弹出栈中元素并更新答案。时间复杂度O(n),空间复杂度O(n)。
2026-09-21 21:50:16
187
原创 【栈-3】394.字符串解码
解题思路:使用栈来处理嵌套的编码字符串。遍历字符串,遇到数字时记录重复次数,遇到左括号 '[' 时将当前数字和已构建的字符串入栈,遇到右括号 ']' 时弹出栈顶,将当前字符串重复k次后拼接。最终返回解码后的完整字符串。时间复杂度O(n),空间复杂度O(n)。
2026-09-21 20:47:35
256
原创 【栈-2】155.最小栈
设计一个支持常数时间查询最小值的栈,可通过双栈法实现:主栈存储所有元素,辅助栈维护当前最小值。每次入栈时,若新元素小于等于辅助栈顶,则将其压入辅助栈;出栈时,若主栈顶等于辅助栈顶,则同步弹出辅助栈顶。这样,getMin()直接返回辅助栈顶元素,实现O(1)时间复杂度。
2026-09-19 10:56:07
224
原创 【栈-1】20.有效的括号
使用栈数据结构,遍历字符串:遇到左括号('(', '{', '[')则入栈;遇到右括号时,检查栈顶是否为对应左括号,若不匹配或栈为空,则无效。遍历结束后,若栈为空,则字符串有效,否则无效。时间复杂度O(n),空间复杂度O(n)。
2026-09-19 10:21:32
367
原创 【链表-11】23.合并K个升序链表
将多个已排序的链表合并为一个有序链表,可采用分治法或最小堆。遍历所有链表头节点,每次选取最小值加入结果链表,并将其后续节点重新入堆。时间复杂度为O(N log k),其中N为总节点数,k为链表数量。边界情况:空列表或仅含空链表时返回空。
2026-09-19 09:01:02
210
原创 FastAPI+Ollama 部署本地AI大模型对话助手
本文介绍如何用Python+FastAPI+Ollama从零搭建本地AI对话助手,实现数据本地化、免APIKey、零成本部署。项目支持通义千问等大模型,通过SSE流式输出,具备多轮对话、上下文记忆等功能。环境仅需安装Python,三步即可运行。核心原理为本地加载Ollama模型并提供FastAPI接口,保障隐私安全。开源地址:https://github.com/yangran-coder/ai-chatbot(MIT许可)。
2026-09-18 23:47:11
335
1
原创 【链表-10】148.排序链表
将链表按升序排序,可采用归并排序算法。递归地将链表拆分为两半,分别排序后合并。通过快慢指针找中点,实现分治。时间复杂度为O(n log n),空间复杂度为O(log n)。适用于链表结构,无需额外数组。
2026-09-18 09:44:58
208
原创 【链表-9】146.LRU缓存
设计LRU缓存需实现O(1)时间复杂度的get和put操作。使用哈希表(HashMap)存储键值对,结合双向链表维护访问顺序:新插入或访问的元素移至链表头部,尾部元素为最久未使用,淘汰时删除尾节点。通过哈希表快速定位节点,链表高效调整顺序,确保整体操作均在常数时间内完成。
2026-09-18 09:11:44
130
原创 【链表-8】19.删除链表的倒数第N个结点
删除链表倒数第 n 个节点,可使用双指针法:定义快慢指针,快指针先走 n 步,随后快慢指针同步前进,当快指针到达末尾时,慢指针指向倒数第 n 个节点的前驱。删除该节点并返回头节点。时间复杂度 O(L),空间复杂度 O(1)。
2026-09-18 08:40:38
173
原创 ClawsGO Science使用指南
ClawsGOScience是一款本地自建的MCP服务器,旨在打通科研全流程。它将论文复现、选题构思、写作与投稿打包整合于统一编程工作台,解决传统科研中代码难找、环境难配、数据难对等痛点,实现从理解论文到产出论文的一体化闭环,让科研更高效、更连贯。
2026-09-17 18:58:02
467
原创 【链表-7】142.环形链表 II
使用双指针(快慢指针)判断链表是否有环。若存在环,快指针与慢指针相遇后,将一指针移至头节点,另一指针保持在相遇点,两者同步移动,再次相遇处即为环的起始节点。时间复杂度O(n),空间复杂度O(1)。
2026-09-17 10:21:17
204
原创 【链表-6】2.两数相加
给定两个逆序存储的非负整数链表,需返回它们相加结果的链表。逐位相加,考虑进位,新建节点存储每位和,直到两链表均遍历完且无进位为止。时间复杂度O(max(m,n)),空间复杂度O(max(m,n))。
2026-09-17 09:52:16
223
原创 【链表-5】21.合并两个有序链表
将两个升序链表合并为一个新升序链表,通过比较两链表当前节点值,依次选取较小者接入结果链表。当一个链表为空时,直接连接另一个链表剩余部分。时间复杂度O(m+n),空间复杂度O(1)。
2026-09-17 09:15:30
389
原创 SciSpace 深度体验:从文献精读到论文初稿一体完成
SciSpace是一款覆盖文献查找、PDF阅读、数据提取到论文初稿撰写的全流程科研辅助工具,旨在整合研究中的碎片化操作。它通过AI技术实现智能搜索、公式解析与内容摘要,提升读论文效率,帮助用户快速梳理文献要点,尤其适合撰写论文或系统性综述的研究者。相比Consensus,SciSpace更注重工作流整合,是提升科研生产力的有力助手。
2026-09-16 20:21:09
102
原创 【链表-4】141.环形链表
使用快慢指针法判断链表是否有环:初始化两个指针,慢指针每次走一步,快指针每次走两步。若链表有环,快指针最终会追上慢指针;若无环,快指针会先到达链表末尾(为空)。时间复杂度O(n),空间复杂度O(1)。
2026-09-16 10:37:47
347
湖北大学计科&软工Java期末复习重点
2025-01-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅