LeetCode-括号栈
🧠 括号栈 左括号入栈,右括号触发结算⭐ 模板一 合法括号判断 左括号 → 入栈 右括号 → 弹栈并匹配 最后栈必须为空 for (cahr c : s.toCharArray()){if ch 是左括号:入栈else:if 栈空: return false;top = 栈顶出...
LeetCode-BFS
一句话结论: 👉 BFS 本质上只和「队列(Queue)」有关。 它依赖 FIFO(先进先出)来保证节点按照“发现顺序”被处理,从而天然形成「一层一层」的遍历效果。 栈不参与 BFS 的任何核心逻辑。 ⭐ 模板层序遍历 初始化 // 队列:保存“等待被访问的节点”...
LeetCode-中心扩散
🧠 枚举回文中心,用左右指针向两边扩散,专治一切回文相关问题。 🧩 模板步骤 枚举中心位置 i 以 (i, i) 作为中心(奇数回文) 以 (i, i + 1) 作为中心(偶数回文) 左右指针同时扩散:left–、right++ 越界或不相等立即停止 ⭐ 模板 中心扩散函数 ...
LeetCode-双指针合并 (归并法)
🧠 涉及两个有序链表的合并、排序问题一句话结论:👉 “谁小谁先走”。这就是拉链原理:同时遍历两条链表,比较当前头节点,较小的那个接在结果链表后面,然后向前走一步。 ⭐ 核心逻辑哨兵节点 (Dummy Node):只要一个 dummy,用来挂接结果。 拉拉链 (Comparison):whi...
LeetCode-反转链表
🧠 通过修改 next 指针方向,将链表从「顺序结构」重排为「逆序结构」 一句话结论:👉 反转链表的本质不是换值,而是 改变指针指向。 核心三步曲: 留后路:next = curr.next (防止链表断裂) 改指向:curr.next = prev (核心反转) 同...
LeetCode-快慢指针(链表)
🧠 核心场景:链表中的位置定位、测距与判环 判断用哪个模板的唯一标准: 是否涉及“相对位置变化 / 追及” → 倍速循环 是否涉及“倒数 / 固定间距” → 定距循环 ⭐ 模板模板一:倍速循环 (Double Speed) 核心逻辑:只有跑得快,才能根据“相对位置”...
LeetCode-单调栈
🧠 单调栈✅ 什么时候用👉 题目出现这三个词 → 直接上单调栈: 右边 / 左边 第一个 更大 / 更小 ⚡ 核心:谁被弹出,谁结算答案 ⭐ 模板1234567891011121314151617181920// 1. 初始化int n = nums.leng...
LeetCode-前缀和
🧠 通过提前累计数组的“历史和”,将任意连续区间的求和问题,转化为两次前缀值的相减。 一句话结论:👉pre 数组要比原数组的长度多一pre[0] = 0 是为了统一公式,避免边界特判前缀和 + 哈希: 找历史区间 ⭐ 模板前缀和 初始化int n = nums.l...
LeetCode-滑动窗口
🧠 通过移动 right 和 left,始终维护一个 [left, right] 的连续区间,并根据题目条件不断扩大或缩小这个区间。 一句话结论:👉 right 进窗(for 循环控制只增不减) left 出窗(只在 while (满足条件) 时移动只增不减)注意窗口状态,遇到出现次数与不...
LeetCode-左右双指针
🧠 解决具有单调性(Monotonicity)或需要两端向中间收缩的问题。 一句话结论:👉 数组有序(前提) 结构由两端点决定 可利用左右的元素的对称关系 可以排除出界元素在 while 循环内部如果还有指针移动(如跳过空格),必须再次判断 left < right,否则会发生索引越...

