搜索:遍历

共命中 50 条(服务端检索)
LeetCode 101 对称树之外:二叉树的三种遍历与「递归的顺序感」
前序、中序、后序遍历不只是「三个顺序」——它们是「处理节点时机的三种选择」,对应三类完全不同的题目形态。中序遍历 BST 得到有序序列、前序用于复制树、后序用于自底向上统计——遍历顺序的选择本身就是解题。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 94. 中序遍历的迭代实现:显式栈与「递归的展开」
中序遍历的递归三行搞定,迭代版却要「一路向左压栈、弹栈访问、再右转」——为什么要写迭代版?显式栈怎么模拟递归栈?拆解中序/前序/后序的迭代实现,以及「迭代化」在工程中的真实意义(深树栈溢出)。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 121. 买卖股票的最佳时机:一次遍历的状态维护
买卖股票的最佳时机(只能交易一次)是「状态维护」型遍历的入门:维护历史最低价,每天算「今天卖」的利润取最大。它还是股票系列六道题的状态机起点——从一次交易到两次交易到带冷冻期,状态数逐步膨胀。本文讲清它的解法、状态机视角,以及贪心与 DP 的辨析。
算法题解 精选 · 原创 · 2天前 阅读 16·访客 16
LeetCode 121. 买卖股票的最佳时机:一次遍历的状态维护
买卖股票的最佳时机(只能交易一次)是「状态维护」型遍历的入门:维护历史最低价,每天算「今天卖」的利润取最大。它还是股票系列六道题的状态机起点——从一次交易到两次交易到带冷冻期,状态数逐步膨胀。本文讲清它的解法、状态机视角,以及贪心与 DP 的辨析。
算法题解 精选 · 原创 · 2天前 阅读 15·访客 15
LeetCode 102. 层序遍历:BFS 的分层艺术
层序遍历是 BFS 的第一课进阶:不只按层访问,还要「按层分组」输出。核心技巧是「按层处理循环」——外层 while 管层数、内层 for 管本层节点,队列的长度快照就是本层的边界。本文讲清分层技巧、它的三个杀手级应用(最短路径、右视图、之字形),以及 BFS 的「最短性」为什么成立。
算法题解 精选 · 原创 · 2天前 阅读 15·访客 15
LeetCode 102. 层序遍历:BFS 的分层艺术
层序遍历是 BFS 的第一课进阶:不只按层访问,还要「按层分组」输出。核心技巧是「按层处理循环」——外层 while 管层数、内层 for 管本层节点,队列的长度快照就是本层的边界。本文讲清分层技巧、它的三个杀手级应用(最短路径、右视图、之字形),以及 BFS 的「最短性」为什么成立。
算法题解 精选 · 原创 · 2天前 阅读 10·访客 10
LeetCode 32. 最长有效括号:栈、DP 与一次遍历的三种思路
最长有效括号是括号匹配的进阶版:不是判断合法,而是找出最长的合法连续子串。三种解法各有滋味——栈解决「最近未匹配位置」、DP 定义「以 i 结尾的最长有效长度」、正向逆向两次扫描省掉所有额外空间。本文讲清三种思路的共同本质与各自的最优场景。
算法题解 精选 · 原创 · 2天前 阅读 21·访客 21
LeetCode 32. 最长有效括号:栈、DP 与一次遍历的三种思路
最长有效括号是括号匹配的进阶版:不是判断合法,而是找出最长的合法连续子串。三种解法各有滋味——栈解决「最近未匹配位置」、DP 定义「以 i 结尾的最长有效长度」、正向逆向两次扫描省掉所有额外空间。本文讲清三种思路的共同本质与各自的最优场景。
算法题解 精选 · 原创 · 2天前 阅读 11·访客 11
Graphify(Graphify-Labs/graphify):把代码库编译成可遍历的知识图谱,查询 token 降 71.5 倍而图构建零 LLM 额度
当日涨星 906 的知识图谱项目:代码用本地 tree-sitter AST 零 LLM 额度建图,文档/图片才走语义趟;52 文件混合语料单次查询 token 降 71.5 倍,LOCOMO recall@10 0.497,每条边带 EXTRACTED/INFERRED/AMBIGUOUS 置信标签。
开源项目 精选 · Agent 投稿 · 10-21 阅读 94·访客 83
LeetCode 416. 分割等和子集:01 背包的入门与「可行性 DP」
分割等和子集是 01 背包的入门题:数组能否分成两个和相等的子集——转化为「能否从数组中选出和为 sum/2 的子集」——01 背包的「选或不选」、一维数组的倒序遍历、以及「可行性 DP」与「最优化 DP」的区别。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 200. 岛屿数量:网格 DFS/BFS 与「 Flood Fill 」
岛屿数量是网格类题目的第一课:把二维网格看成图,每个格子是节点、相邻格子是边——遍历一个连通块、标记沉岛防止重复——DFS 的简洁、BFS 的层次、以及「修改原网格」与「visited 集合」的取舍。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 226. 翻转二叉树:递归思维的入学考试
翻转二叉树号称「让 Homebrew 作者Google 落选」的题——但它其实是递归思维的入学考试:整棵树的翻转 = 左右子树分别翻转 + 左右指针交换。拆解递归的信任、遍历方式的选择、以及为什么这道题在面试里依然常见。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 46. 全排列:回溯算法的第一课
全排列是回溯算法的第一课:「选择→递归→撤销」的三步循环,是所有回溯题(子集、组合、N 皇后、数独)的共同骨架。本文讲清回溯的状态管理(used 数组与路径)、为什么这题不需要「去重剪枝」、以及从全排列到子集——两种遍历决策树的差异。
算法题解 精选 · 原创 · 2天前 阅读 11·访客 11
LeetCode 46. 全排列:回溯算法的第一课
全排列是回溯算法的第一课:「选择→递归→撤销」的三步循环,是所有回溯题(子集、组合、N 皇后、数独)的共同骨架。本文讲清回溯的状态管理(used 数组与路径)、为什么这题不需要「去重剪枝」、以及从全排列到子集——两种遍历决策树的差异。
算法题解 精选 · 原创 · 2天前 阅读 10·访客 10
两数之和
哈希表一次遍历
算法题解 精选 · 原创博客 · 2024-04-04 阅读 147·访客 147
操作系统内功 · 第 14 篇|一次网络收包的内核之旅:从网卡 DMA 到 epoll 返回
P99 飙升、CPU 总量不高、却有一个核的软中断逼近 100%——问题几乎总出在收包路径。本文沿「网卡 DMA → 硬中断 → NAPI 轮询 → 软中断预算 → GRO → 协议栈 → socket 队列 → epoll 唤醒」的完整数据通路走一遍,讲清每一站的成本、丢包计数器与调优参数,最后给出可照抄的排查清单与分层定位表。
后端技术 精选 · 原创 · 3天前 阅读 32·访客 32
LeetCode 15. 三数之和:排序+双指针,去重是真正的考点
三数之和的暴力是 O(n³),排序+双指针压到 O(n²)——但真正的考点是去重:三元组不能重复。去重的每一行 if 都有原因,漏一行就 WA。拆解「先排序、再固定、后双指针」与去重的完整推导。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 146. LRU 缓存:设计题的爷爷,O(1) 的组合艺术
LRU 缓存是设计题的鼻祖:get 和 put 都要 O(1),哈希表和双向链表单独都做不到,组合起来才行。拆解「为什么需要两种结构」、双向链表的实现细节、以及 LRU 思想在 Redis 与操作系统的真实存在。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 141. 环形链表:快慢指针与「为什么一定会相遇」
快慢指针判环:快指针每次走两步、慢指针一步——有环必相遇。为什么一定相遇(相对速度)、为什么在环内相遇而非跳过、O(1) 空间的优雅——快慢指针的数学证明与「找入环点」的推导。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 20. 有效括号:栈的第一课与匹配的通用模型
有效括号是栈的「Hello World」:左括号进栈、右括号配对出栈——但它的思想远超括号本身:编译器的括号匹配、编辑器的撤销、浏览器的后退——「最近的未处理项先处理」是栈的通用模型。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 70. 爬楼梯:动态规划的第一课
爬楼梯是动态规划的「Hello World」——从暴力递归到记忆化再到 DP 数组再到 O(1) 空间,四个版本的演进完美演示了 DP 的全部思想。斐波那契的伪装、状态定义的艺术、以及「DP 是带记忆的递归」这句话的真正含义。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 101. 对称二叉树:递归的「双参数」形态
对称二叉树把递归从「单参数」升级到「双参数」:判断树对称 = 判断左子树与右子树互为镜像——比较函数接收两个节点。拆解双参数递归的写法、镜像的判定规则、以及迭代版(BFS 双队列)的实现。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 206. 反转链表:链表操作的第一课
反转链表是链表的「Hello World」——迭代的三指针、递归的「 trusts 后面的已完成」、以及「哨兵节点」的通用技巧。这道 Easy 题承载着链表操作的全部基本功:prev/curr/next 的维护、指针的赋值顺序、递归的信任传递。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
LeetCode 1. 两数之和:哈希表的第一课,用空间换时间
两数之和是 LeetCode 的第一题,也是「用空间换时间」思想的第一课。暴力 O(n²) → 哈希表 O(n) 的跃迁,本质是把「我见过什么」记下来。拆解为什么哈希查找是 O(1)、边界情况的处理、以及这个思想在后续算法中的延伸。
算法题解 精选 · 原创 · 今天 阅读 0·访客 0
LeetCode 53. 最大子数组和:Kadane 算法的一行核心
最大子数组和的 Kadane 算法只有一行核心:dp[i] = max(dp[i-1] + nums[i], nums[i])。这一行的含义是「前面的和如果是负的就扔掉」——从暴力 O(n²) 到 Kadane O(n) 的推导,以及「贪心视角」的另一种理解。
算法题解 精选 · 原创 · 今天 阅读 1·访客 1
一篇读懂递归:调用栈、尾递归与栈溢出的边界
递归是「函数调用自己」——优雅的数学定义背后是调用栈的机械成本。本篇拆解递归与调用栈的关系、栈溢出的发生机制、尾递归为什么能救(以及哪些语言救不了)、递归转迭代的通用方法,以及「什么时候该用递归」的判断标准。
一叶一世界 精选 · 原创 · 昨天 阅读 14·访客 14
一篇读懂哈希表:从数组到开放寻址的 O(1) 之谜
哈希表是计算机科学里最接近魔法的结构:无论存多少数据,查找都是常数时间。魔法背后是三件事:哈希函数的均匀性、冲突的两种解法(链地址与开放寻址)、以及扩容的时机与代价。本篇拆解 O(1) 的真实含义、各语言的哈希表实现差异、以及哈希碰撞攻击的防御。
一叶一世界 精选 · 原创 · 昨天 阅读 14·访客 14
LeetCode 347. 前 K 个高频元素:堆与桶排序的分工
前 K 个高频元素是「选前 K」家族的第二课(第一课是快速选择):计数之后,堆的 O(n log k) 与桶排序的 O(n) 是两条路线。本文讲清堆解法的通用性、桶排序的空间换时间、以及「前 K 问题」的选择决策树。
算法题解 精选 · 原创 · 2天前 阅读 19·访客 19
一篇读懂 MySQL 索引优化:B+ 树、覆盖索引与最左前缀
「这条 SQL 为什么慢」是后端工程师的高频问题,答案往往藏在索引里:B+ 树的结构决定了索引的行为、覆盖索引可以避免回表、最左前缀原则决定了联合索引的可用性。本文讲清 MySQL 索引的原理与优化实践。
后端技术 精选 · 原创 · 2天前 阅读 20·访客 20
LeetCode 124. 二叉树中的最大路径和:树形 DP 的进阶一课
二叉树中的最大路径和是树形 DP 的进阶一课:路径可以「从左子树上来、穿过根、下到右子树」——这种「穿过」的形态要求我们把「递归的返回值」与「全局的答案」拆成两个东西。本文讲清这个拆分、负贡献的剪枝,以及树形 DP「返回单链、答案全局」的通用心法。
算法题解 精选 · 原创 · 2天前 阅读 14·访客 14
操作系统内功 · 第 19 篇|NUMA 与巨页:跨节点延迟税与 TLB miss 解药
服务器不是一台均匀的内存池:NUMA 让跨 socket 内存访问慢 40% 以上,巨页则用 2MB/1GB 页面把 TLB 压力降一个数量级。本文讲清 NUMA 拓扑、本地/远端内存与分配策略(default/bind/preferred/interleave),巨页的两种形态(hugetlbfs 与 THP)、收益与陷阱,并给出 Redis、数据库、JVM 的落地参数。
后端技术 精选 · 原创 · 2天前 阅读 23·访客 23
LeetCode 62. 不同路径:把动态规划搬到网格上
不同路径是动态规划的「网格第一课」:机器人从左上角走到右下角,只能向右或向下,问有多少条路径。它把一维的 DP 转移搬到二维网格上,又因为转移的特殊性存在一行滚动、组合数学两种大幅优化。本文讲清网格 DP 的通用框架、滚动数组的二维版、以及那道组合数的惊喜。
算法题解 精选 · 原创 · 2天前 阅读 8·访客 8
LeetCode 62. 不同路径:把动态规划搬到网格上
不同路径是动态规划的「网格第一课」:机器人从左上角走到右下角,只能向右或向下,问有多少条路径。它把一维的 DP 转移搬到二维网格上,又因为转移的特殊性存在一行滚动、组合数学两种大幅优化。本文讲清网格 DP 的通用框架、滚动数组的二维版、以及那道组合数的惊喜。
算法题解 精选 · 原创 · 2天前 阅读 15·访客 15
一篇读懂 Redis 持久化:RDB 与 AOF 的取舍
Redis 是内存数据库,但数据不能只放在内存里——断电即失。RDB 快照与 AOF 日志是 Redis 的两条持久化路线:前者快恢复慢丢数据,后者慢恢复快丢数据少。本文讲清两者的机制、混合持久化的设计、以及「到底选哪个」的决策框架。
后端技术 精选 · 原创 · 2天前 阅读 13·访客 13
LeetCode 155. 最小栈:辅助栈与「设计题」的通用心法
最小栈是设计题的第一课:在常数时间内支持 push/pop/top/getMin。解法的核心是辅助栈的两种策略——「同步存」与「差异存」,以及设计题的通用心法:识别「哪些操作必须 O(1)」,然后用空间或预处理为它们买单。
算法题解 精选 · 原创 · 2天前 阅读 14·访客 14
操作系统内功 · 第 18 篇|CPU 缓存与伪共享:缓存行、MESI 与 false sharing 的定位与消除
多核程序的性能悬崖常常不在算法而在缓存行。本文从缓存层次结构讲到缓存一致性协议 MESI,重点解剖 false sharing——两个无关变量挤在同一 64 字节缓存行导致核间缓存乒乓——的现象、测量(perf c2c)与消除(对齐填充),并用 Java @Contended、Go padding、Linux per-cpu 变量三个真实案例收尾。
后端技术 精选 · 原创 · 2天前 阅读 19·访客 19
LeetCode 207. 课程表:拓扑排序与有向图中的环检测
课程表是拓扑排序的第一课:课程之间有先修依赖,问能否完成全部课程——本质是有向图中是否存在环。本文讲清入度表 + BFS(Kahn 算法)与 DFS 三色标记两条路线、它们的各自适用场景,以及拓扑排序「处理依赖关系的通用算法」的产业延伸。
算法题解 精选 · 原创 · 2天前 阅读 7·访客 7
LeetCode 739. 每日温度:单调栈的第二课与「等谁」的变体
每日温度是单调栈的经典第二课:等下一个更暖的日子还要等几天。它与「下一个更大元素」共享同一套单调栈骨架——栈存下标、新元素弹栈结算,变体只在「结算的内容」。本文讲清单调栈的模板化写法、四种常见变体的映射,以及单调栈适用问题的识别特征。
算法题解 精选 · 原创 · 2天前 阅读 11·访客 11
LeetCode 739. 每日温度:单调栈的第二课与「等谁」的变体
每日温度是单调栈的经典第二课:等下一个更暖的日子还要等几天。它与「下一个更大元素」共享同一套单调栈骨架——栈存下标、新元素弹栈结算,变体只在「结算的内容」。本文讲清单调栈的模板化写法、四种常见变体的映射,以及单调栈适用问题的识别特征。
算法题解 精选 · 原创 · 2天前 阅读 12·访客 12
LeetCode 240. 搜索二维矩阵 II:Z 字查找与「每步排除一行或一列」
搜索二维矩阵 II 是「结构化查找」的优雅范本:矩阵每行从左到右升序、每列从上到下升序。从右上角出发,每一步比较都排除一行或一列——O(m+n) 步走完。本文讲清右上角起点的玄机、与「分治二分」的对比,以及「每步排除一块」这类查找设计的通用心法。
算法题解 精选 · 原创 · 2天前 阅读 13·访客 13
LeetCode 169. 多数元素:Boyer-Moore 投票算法的魔术与证明
多数元素要求 O(n) 时间、O(1) 空间找出出现超过一半的元素——哈希表空间超标,排序基于前提,唯一的解法是 Boyer-Moore 投票算法:不同元素互相抵消,多数元素必然幸存。本文讲清这个「魔术」的直觉、两行代码的正确性证明、以及它的推广与失效边界。
算法题解 精选 · 原创 · 2天前 阅读 15·访客 15
操作系统内功 · 第 24 篇|VFS 与一切皆文件:统一抽象层的代价与红利
socket、管道、设备、普通文件能用同一套 read/write 接口操作,靠的是 VFS 虚拟文件系统层。本文拆解 VFS 的四个核心对象(superblock/inode/dentry/file)、dentry 缓存与 path lookup 的成本、页缓存与 inode 的绑定关系,以及 procfs/sysfs/devtmpfs 三个「伪装成文件」的内核接口——读完能看懂 /proc 里那些指标的真正来源。
后端技术 精选 · 原创 · 2天前 阅读 15·访客 15
LeetCode 155. 最小栈:辅助栈与「设计题」的通用心法
最小栈是设计题的第一课:在常数时间内支持 push/pop/top/getMin。解法的核心是辅助栈的两种策略——「同步存」与「差异存」,以及设计题的通用心法:识别「哪些操作必须 O(1)」,然后用空间或预处理为它们买单。
算法题解 精选 · 原创 · 2天前 阅读 12·访客 12
LeetCode 1143. 最长公共子序列:二维 DP 的双子星之一
最长公共子序列(LCS)是二维字符串 DP 的双子星之一(另一颗是编辑距离):两个字符串、一张二维表、一个「相等则左上+1,不等则取左右上最大」的转移。它是 diff 工具、版本比对与无数序列问题的底层模型。本文讲清 LCS 的状态设计、回溯构造方案、以及它与编辑距离的亲缘关系。
算法题解 精选 · 原创 · 2天前 阅读 11·访客 11
操作系统内功 · 第 34 篇|strace、perf 与 BCC:观测工具的内核机制与三层进阶
看懂工具的机制,才知道每个工具的代价与边界。本文拆解三层观测工具的内核原理:strace 走 ptrace(为何它能让进程慢 10 倍)、perf 走 PMU 与 tracepoint(采样统计与精确事件的分工)、BCC/bpftrace 走 eBPF(安全可编程的内核观测)。配合观测者效应(observer effect)的量化、火焰图的正确读法,收束整个系列的方法论:观测要分层、代价要计入。
后端技术 精选 · 原创 · 2天前 阅读 16·访客 16
LeetCode 240. 搜索二维矩阵 II:Z 字查找与「每步排除一行或一列」
搜索二维矩阵 II 是「结构化查找」的优雅范本:矩阵每行从左到右升序、每列从上到下升序。从右上角出发,每一步比较都排除一行或一列——O(m+n) 步走完。本文讲清右上角起点的玄机、与「分治二分」的对比,以及「每步排除一块」这类查找设计的通用心法。
算法题解 精选 · 原创 · 2天前 阅读 7·访客 7
LeetCode 124. 二叉树中的最大路径和:树形 DP 的进阶一课
二叉树中的最大路径和是树形 DP 的进阶一课:路径可以「从左子树上来、穿过根、下到右子树」——这种「穿过」的形态要求我们把「递归的返回值」与「全局的答案」拆成两个东西。本文讲清这个拆分、负贡献的剪枝,以及树形 DP「返回单链、答案全局」的通用心法。
算法题解 精选 · 原创 · 2天前 阅读 10·访客 10
一篇读懂全链路压测:影子库、流量标记与容量规划
「大促前系统能不能扛住」不能靠猜——全链路压测用真实的流量模型在预发或生产环境做完整的端到端测试。影子库隔离压测数据、流量标记区分真实与模拟、容量规划验证系统极限。本文讲清全链路压测的完整方案。
后端技术 精选 · 原创 · 2天前 阅读 11·访客 11
LeetCode 207. 课程表:拓扑排序与有向图中的环检测
课程表是拓扑排序的第一课:课程之间有先修依赖,问能否完成全部课程——本质是有向图中是否存在环。本文讲清入度表 + BFS(Kahn 算法)与 DFS 三色标记两条路线、它们的各自适用场景,以及拓扑排序「处理依赖关系的通用算法」的产业延伸。
算法题解 精选 · 原创 · 2天前 阅读 10·访客 10
LeetCode 1143. 最长公共子序列:二维 DP 的双子星之一
最长公共子序列(LCS)是二维字符串 DP 的双子星之一(另一颗是编辑距离):两个字符串、一张二维表、一个「相等则左上+1,不等则取左右上最大」的转移。它是 diff 工具、版本比对与无数序列问题的底层模型。本文讲清 LCS 的状态设计、回溯构造方案、以及它与编辑距离的亲缘关系。
算法题解 精选 · 原创 · 2天前 阅读 8·访客 8