Hot 100 --- 缺失的第一个正数
本文以LeetCode经典题目"缺失的第一个正数"为例,从暴力解法入手,逐一分析哈希表和排序两种常见优化思路为何不满足O(n)时间+O(1)空间的要求,再引出原地哈希解法,系统讲解如何利用数组本身作为哈希表,将元素放到正确的位置上
Hot 100 --- 除自身以外数组的乘积
本文以LeetCode经典题目"除自身以外数组的乘积"为例,从暴力解法入手,分析不能使用除法导致的重复计算问题,再通过空间换时间的方式用右累计乘积数组优化,将时间复杂度从O(n²)优化到O(n)
Hot 100 --- 轮转数组
本文以LeetCode经典题目"轮转数组"为例,从暴力解法入手,逐步优化到O(n)额外空间的解法,再通过三次翻转法实现O(1)空间复杂度的原地修改,系统讲解如何用红黑笔的比喻理解三次翻转的巧妙之处
Hot 100 --- 合并区间
本文以LeetCode经典题目"合并区间"为例,从暴力解法入手,分析其必须遍历全部剩余数组的原因,再通过排序将"未知"变为"已知",系统讲解如何利用排序后天然满足的重叠判断条件,将时间复杂度从O(n²)优化到O(n log n)
一文吃透 Spring AI Alibaba RAG:三种架构模式 + 全流程优化详解
系统讲解 RAG 核心原理与替代方案(Skill、MCP、Wiki)的取舍,详细拆解 Spring AI Alibaba 三种 RAG 架构模式(两步 RAG、Agentic RAG、混合 RAG)与四阶段全链路优化(Pre-Retrieval 查询压缩与扩展、Retrieval 向量检索、Post-Retrieval 重排序与压缩、Generation 上下文增强),并提供 ReactAgent 钩子、FunctionToolCallback 多工具调用等完整可运行代码示例。
Hot 100 --- 最大子数组和
本文以LeetCode经典题目"最大子数组和"为例,从暴力解法入手,利用前缀和优化到维护最小前缀和的O(n)解法,再从动态规划角度重新理解,系统讲解如何利用"前数组和是否对当前元素有贡献"这一关键判断,将时间复杂度从O(n²)优化到O(n)
Hot 100 --- 最小覆盖子串
本文以LeetCode经典题目"最小覆盖子串"为例,从暴力解法入手,逐步优化到双指针滑动窗口解法,重点讲解如何通过match变量动态维护哈希表的匹配状态,避免每次遍历比较,将时间复杂度从O(n²×m)优化到O(n)
Hot 100 --- 滑动窗口最大值
本文以LeetCode经典题目"滑动窗口最大值"为例,从暴力优化解法入手,分析其在递减数组下的最坏情况,再逐步优化到双端单调递减队列解法,系统讲解如何动态维护一个只保留可能成为最大值的候选队列,将时间复杂度从O(nk)优化到O(n)
Hot 100 --- 和为 K 的子数组
本文以LeetCode经典题目"和为K的子数组"为例,从暴力解法入手,逐步优化到前缀和+哈希表解法,系统讲解如何利用前缀和将子数组和转化为两个前缀和之差,再通过哈希表将时间复杂度从O(n²)优化到O(n)
Hot 100 --- 找到字符串中所有字母异位词
本文以LeetCode经典题目"找到字符串中所有字母异位词"为例,从暴力解法入手,逐步优化到滑动窗口+差异计数解法,系统讲解如何通过只关注窗口进出字符对差异的影响,将时间复杂度从O(nm)优化到O(n)


