Yinchen 的博客
首页
分类
归档
关于
首页
分类
归档
关于
登录
标签:Java
清除筛选
单调队列速查模板
2026/08/11
算法
识别信号:滑动窗口最大/最小值、形如 dp[i] = min(dp[j]) + ... 的 DP 优化。 口诀:去尾保单调(新人压制弱旧人)、去头保时效(队头滑出窗口)。 滑动窗口最大值模板 求最小值改 >=。peekFirst 空队返回 null,自动拆箱 NPE,先判空。 LC239 滑动窗口最大值 本文由 AgentPlanFlow 生成
Leetcode 34 在排序数组中查找元素位置:二分
2026/08/10
题解
LC34 在排序数组中查找元素的第一个和最后一个位置 模板 lowerBound(左边界,第一个 >= target): upperBound(右边界,最后一个 = target 的位置。 核心在于 mid 的计算和区间的收缩方向。mid = l + (r - l) / 2,不 +1,mid 倾向于靠左。 当 nums[mid] >= target:mid 本身可能是答案 → r = mid,区间
二分查找速查模板
2026/08/10
算法
7.1 左边界(第一个满足) int upper(int l, int r) { while (l mid 必须 +1!否则 (l, l+1) 区间会死循环——不加 1 时 mid 永远等于 l,l = mid 不改变 l。 7.3 二分答案 "最大值最小化"/"最小值最大化" → 二分。值域大用 long,防 (l+r)/2 溢出。 LC34 排序数组第一个和最后一个位置 LC704 二分查
Java轻量多线程框架设计与实现
2026/08/04
设计模式
AsyncTaskPool 是一个轻量多线程框架,其核心代码不到 400 行,同时支持三种常用设计模式。 一、整体架构:三层角色 AsyncTaskPool 只有三个核心角色: BasicTaskDispatchPool——对外的门面。通过继承实现三个抽象方法:runTask(具体任务逻辑)、getFinishedCallback(全部完成后回调)、getItemTaskCallback(单个任务
单调栈速查模板
2026/07/31
算法
识别信号:"下一个更大/更小"、"接雨水"、"最大矩形"、"区间最值贡献"。 口诀:求大用减、求小用增(栈内单调性)。栈里存索引。 弹栈瞬间三信息同时到手:被弹元素(高)、新栈顶(左边界)、当前 i(右边界)。三类题共用这骨架,区别只在结算公式。 单调栈for 遍历数组,每轮两个动作: 弹栈(while):当前元素破坏单调性时,不停弹出栈顶。弹栈时拿到三样东西: 被弹元素(stack.pop )
链表五大套路
2026/07/30
算法
节点定义: 套路速查 套路 出现信号 虚拟头 dummy 删除/插入头节点、合并 快慢指针 找中点、判环、环入口、倒数第 K 原地反转 reverse、回文 分段处理 K 个一组、区间反转、奇偶 哈希标记 相交链表、复制随机链表 2.1 虚拟头 dummy 需要删除或插入头节点的场景,用