- 博客(152)
- 收藏
- 关注
原创 AI Agent 常见工作模式详解
Agent 工作模式,指的是一个 AI Agent 在完成任务时,如何组织“思考、行动、观察、反思、协作、记忆”等环节。大模型 LLM:负责推理、规划、决策工具 Tools:搜索、数据库、API、代码执行器记忆 Memory:短期上下文、长期记忆环境 Environment:Agent 可以感知和操作的外部世界控制循环 Loop:决定下一步是继续思考、调用工具,还是输出答案模式一句话概括核心循环适用场景ReAct边想边做通用工具型 Agent先规划再执行复杂多步任务。
2026-09-17 19:46:31
152
原创 【动态规划】【中等/困难】高频题目
维护数组 dp[i] 表示:爬到第 i 阶楼梯,一共有多少种方法。dp[i] 表示:偷窃前 i+1 间房屋,可以获得的最大金额。
2026-09-16 21:00:22
189
原创 【贪心算法】【中等】买卖股票/跳跃游戏/划分字母区间
如下例所示 prices=[7,1,5,3,6,4],建立表如下。维护变量maxReach,表示:当前能够覆盖到的最远下标。今天结束时「没有股票」,同样两种来源。今天结束时「持有股票」,有两种来源。
2026-09-16 14:50:54
533
原创 【栈】【堆】【中等】有效的括号/最小栈/字符串解码/每日温度/数组中K大元素/前K个高频元素
【代码】【栈】【堆】【中等】有效的括号/最小栈/字符串解码/每日温度/数组中K大元素/前K个高频元素。
2026-09-15 20:46:36
186
原创 【二分查找】【困难】寻找两个有序数组的中位数
例如偶数数组为[1,2,3,4,5,6] ,此时中位数为(3+4)/2=3.5。例如奇数数组为[1,2,3,4,5] ,此时中位数为3。中位数:将整体排序数组分为左右两个相等的序列。nums1 右边最小值 = right1。nums2 右边最小值 = right2。nums1 左边最大值 = left1。nums2 左边最大值 = left2。
2026-09-14 16:48:34
341
原创 【二分查找】【中等】搜索二维矩阵/排序数组的第一位和最后位置/搜索旋转排序数组/旋转排序数组中的最小值
原题链接题目要求时间复杂度是 O(log n)进行两次二分查找:寻找两个边界第一次二分:找最左边的 target第二次二分:找最右边的 target//寻找左端点ans = mid;return ans;//寻找右端点ans = mid;return ans;简化后的代码// 没找到 target// 找第一个 >= target 的位置} else {
2026-09-14 11:24:01
137
原创 缓存预热(Cache Warm-up)的解决方案与对比
例如新闻系统中,某一篇文章:访问量快速上涨 + 评论量快速上涨 + 转发量快速上涨。系统可能判断:该文章即将成为热点,于是提前缓存:文章详情 + 评论列表 + 作者信息 + 推荐内容。:用到了再缓存,即第一次请求 -> 缓存没有数据 -> 查数据库 -> 写入缓存 -> 返回结果。缓存预热(Cache Warm-up)指的是:在用户真正访问数据之前,提前把后续可能频繁访问的数据加载到缓存中。warmUpSeckill() 本身只是一个普通方法,什么时候需要预热,就需要什么时候调用这个方法。
2026-09-13 20:20:25
129
原创 【图论】岛屿数量/腐烂的橘子/课程表/实现前缀树
把每一个 ‘1’ 看成图中的一个节点。如果两个 ‘1’ 上下左右相邻,那么它们之间就有一条边。用一棵“字符树”来存字符串,公共前缀只存一份。所有初始腐烂橘子同时加入队列。首先遍历整个 grid。
2026-09-11 17:04:21
84
原创 【二叉树】【中等】二叉树的右视图/展开链表/最近公共祖先
核心是每一层优先访问右节点。可以先前序遍历,把所有节点放进 List。再按照顺序重新连接节点。
2026-09-08 10:35:28
175
原创 【二叉树】【困难】二叉树中的最大路径和
二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:输入:root = [-10,9,20,null,null,15,7]输出:42。
2026-09-07 10:51:38
423
原创 【二叉树】【中等】二叉搜索树
有效 二叉搜索树定义如下:节点的左子树只包含 严格小于 当前节点的数。节点的右子树只包含 严格大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。
2026-09-06 17:01:38
234
原创 【链表】【困难】K个一组翻转链表
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]示例 2:输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,4,5]提示:链表中的节点数目为 n。
2026-09-06 11:16:32
738
原创 【链表】【中等】两数相加/倒N删除/两个交换/排序链表/LRU缓存
两个链表逐位走,当前位 % 10,进位 / 10,剩余 carry 标记进位。
2026-09-05 15:40:23
237
原创 【二叉树】【简单】二叉树的翻转/对称/平衡/深度/直径
题目中对应的二叉树如下所示,最长路径可以是:4 → 2 → 1 → 3。也可以是:5 → 2 → 1 → 3。① 返回给父节点的值,表示当前节点往下走的最大深度。② 当前节点贡献的直径,表示如果最长路径经过当前节点,那么长度是多少。比较两个节点时,会有几种情况。
2026-09-05 10:15:21
250
原创 【二叉树】二叉树的先序/中序/后续/层次遍历
进入每一层时先记录 size = queue.size();只处理这 size 个节点,处理中加入队列的新节点属于下一层。
2026-09-03 22:14:33
27
原创 【链表】【简单】相交/反转/回文/环形/合并有序链表
请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。仅仅是为了标识链表的实际情况。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。
2026-09-03 19:57:15
610
原创 【矩阵】【中等】搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。
2026-09-02 11:32:47
259
原创 【矩阵】【中等】旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例 2:输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
2026-09-02 11:10:15
178
原创 【普通数组】【困难】缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3解释:范围 [1,2] 中的数字都在数组中。示例 2:输入:nums = [3,4,-1,1]输出:2解释:1 在数组中,但 2 没有。示例 3:输入:nums = [7,8,9,11,12]输出:1解释:最小的正数 1 没有出现。
2026-08-24 16:28:05
272
原创 【普通数组】【中等】除了自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除了 nums[i] 之外其余各元素的乘积。题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。
2026-08-24 15:20:30
240
原创 【普通数组】【中等】合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
2026-08-22 19:50:54
202
原创 【普通数组】【中等】最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6。
2026-08-20 19:51:26
214
原创 Spring Boot Validation 声明式参数校验
Spring Boot Validation 是一套基于 Jakarta Bean Validation(原 JSR 303/380)规范的数据校验框架。它的核心作用就是帮你自动检查接口传入的参数是否合法,避免你在业务代码里写一堆 if (xxx == null) { return “参数错误”;} 这样的重复代码。
2026-08-19 15:38:46
243
原创 【子串】【困难】最小覆盖子串
给定两个字符串 s 和 t,长度分别是 m 和 n,返回 s 中的 最短窗口 子串,使得该子串包含 t 中的每一个字符(包括重复字符)。如果没有这样的子串,返回空字符串 “”。测试用例保证答案唯一。示例 1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”解释:最小覆盖子串 “BANC” 包含来自字符串 t 的 ‘A’、‘B’ 和 ‘C’。示例 2:输入:s = “a”, t = “a”输出:“a”解释:整个字符串 s 是最小覆盖子串。
2026-08-13 22:41:50
226
原创 copyProperties的常见问题
Spring 的 org.springframework.beans.BeanUtils.copyProperties 支持long->Long 、Integer->int等的转换,因为自动拆装箱,可以正常拷贝。如果源对象的内部类属性为 null,拷贝后目标对象该属性依然为 null,不会自动 new 一个空对象。copyProperties 只复制对象的第一层属性值。如果属性是对象(如 Address),拷贝后两个对象的 address 指向堆内存中的同一个实例。在循环中,反射开销明显。
2026-08-13 16:19:14
185
原创 【字串】【困难】滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。
2026-08-12 20:53:53
307
原创 JavaType与TypeReference
Java 的泛型在编译后会进行类型擦除,运行时 List<String> 和 List<Integer> 对于 JVM 来说都是 List.class,原本的泛型参数会丢失。Jackson 在进行反序列化时,必须拿到完整的泛型信息才能正确解析 JSON,TypeReference 和 JavaType 就是用来弥补擦除信息的两种工具。
2026-08-12 16:43:21
156
原创 【字串】【中等】和为K的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的子数组的个数。子数组是数组中元素的连续非空序列。
2026-08-05 11:21:22
192
原创 【滑动窗口】【中等】找出字符串中所有的字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。示例 1:输入: s = “cbaebabacd”, p = “abc”输出: [0,6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。
2026-07-30 17:21:11
185
原创 【滑动窗口】【中等】无重复字符的最长字串
给定一个字符串 s ,请你找出其中不含有重复字符的的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。注意 “bca” 和 “cab” 也是正确答案。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
2026-07-30 15:29:43
179
原创 【双指针】【困难】接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
2026-07-29 20:51:48
215
原创 【双指针】【中等】三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= j、i!= k 且 j!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解释:不同的三元组是 [-1,0,1] 和 [-1,-1,2]
2026-07-29 11:09:50
309
原创 【双指针】【中等】盛最多水的容器
给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器>能够容纳水(表示为蓝色部分)的最大值为 49。
2026-07-28 11:25:20
333
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅