标签:LeetCode清除筛选

单调队列速查模板

识别信号:滑动窗口最大/最小值、形如 dp[i] = min(dp[j]) + ... 的 DP 优化。 口诀:去尾保单调(新人压制弱旧人)、去头保时效(队头滑出窗口)。 滑动窗口最大值模板 求最小值改 >=。peekFirst 空队返回 null,自动拆箱 NPE,先判空。 LC239 滑动窗口最大值 本文由 AgentPlanFlow 生成

Leetcode 34 在排序数组中查找元素位置:二分

LC34 在排序数组中查找元素的第一个和最后一个位置 模板 lowerBound(左边界,第一个 >= target): upperBound(右边界,最后一个 = target 的位置。 核心在于 mid 的计算和区间的收缩方向。mid = l + (r - l) / 2,不 +1,mid 倾向于靠左。 当 nums[mid] >= target:mid 本身可能是答案 → r = mid,区间

二分查找速查模板

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 二分查

Leetcode 42 接雨水 :单调栈

LeetCode 42. 接雨水 一、题目解析 1.1 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度,计算按此排列的柱子下雨之后能接多少雨水。 输入是一个数组 heights,输出是积水总量。 1.2 示例 问题本质:对于每一段凹槽(两个较高的柱子夹着较低的柱子),接水量取决于左右两边较矮的那根柱子与槽底的差值,再乘以宽度。 二、思路分析 2.1 接水的条件 能接水的场景可以描述

Leetcode 901:单调栈

LeetCode 901. 股票价格跨度 一、题目解析 1.1 题目描述 设计一个 StockSpanner 类,每次调用 next(price) 时,返回当天股票价格的跨度。 "跨度"的定义:从今天往回数,连续有多少天的股价 ≤ 今天的价格(含今天)。 换句话说,对于每一天,找到左边第一个比它大的那天,两者之间的天数就是跨度。 1.2 示例走一遍 天数 价格 为什么是这个跨度

单调栈速查模板

识别信号:"下一个更大/更小"、"接雨水"、"最大矩形"、"区间最值贡献"。 口诀:求大用减、求小用增(栈内单调性)。栈里存索引。 弹栈瞬间三信息同时到手:被弹元素(高)、新栈顶(左边界)、当前 i(右边界)。三类题共用这骨架,区别只在结算公式。 单调栈for 遍历数组,每轮两个动作: 弹栈(while):当前元素破坏单调性时,不停弹出栈顶。弹栈时拿到三样东西: 被弹元素(stack.pop )

链表五大套路

节点定义: 套路速查 套路 出现信号 虚拟头 dummy 删除/插入头节点、合并 快慢指针 找中点、判环、环入口、倒数第 K 原地反转 reverse、回文 分段处理 K 个一组、区间反转、奇偶 哈希标记 相交链表、复制随机链表 2.1 虚拟头 dummy 需要删除或插入头节点的场景,用