- 博客(229)
- 收藏
- 关注
原创 LeetCode Hot100(52/100)——394. 字符串解码
正确处理数字与括号的层级关系;清晰地定义每层的字符串拼接逻辑;合理使用栈或递归结构。
2026-02-12 09:39:02
353
原创 LeetCode Hot100(51/100)——155. 最小栈
特性描述设计思路用辅助栈同步记录最小值优点操作简单,逻辑清晰,性能稳定缺点空间使用略多时间复杂度O(1)空间复杂度O(n)
2026-02-12 09:38:06
407
原创 LeetCode Hot100(50/100)——153. 寻找旋转排序数组中的最小值
LeetCode 官方题目描述给定一个升序排列数组,该数组在某个未知的轴上进行了旋转,要求找出其中的最小元素。输入:nums = [3,4,5,1,2]输出:1数组原本是,在元素 3 处进行了旋转,最小值为 1。解法思路时间复杂度空间复杂度暴力扫描遍历整个数组寻找最小值O(n)O(1)二分查找利用有序性缩小搜索区间O(log n)O(1)最终采取二分查找解法可在对数时间内高效求解。
2026-02-12 09:37:34
434
原创 LeetCode Hot100(49/100)——33. 搜索旋转排序数组
我们可以用二分查找的思想进行搜索,只需在二分过程中判断当前区间的性质(是否有序),再决定搜索方向。如果存在,返回它的下标;这道题是经典的二分查找变形题,非常适合掌握二分技巧与边界判断。计算 mid = (left + right) / 2。(升序排序后某个位置被旋转),以及一个目标值。通过二分的逻辑提升,搜索旋转排序数组可以在。接着分别在对应的区间使用常规二分查找。的取值范围决定下一步的查找方向。判断 target 在左/右区间。,就能确定左右两段的有序区间。target 在左区间?时间 O(log n)
2026-02-12 09:37:01
393
原创 LeetCode Hot100(48/100)——34. 在排序数组中查找元素的第一个和最后一个位置
方法思路时间复杂度空间复杂度适用场景暴力法顺序扫描O(n)O(1)简单实现,小数据集二分查找法双边界搜索O(log n)O(1)有序数组,性能要求高这道题是经典的二分查找边界问题。查找第一个大于等于target的元素;查找最后一个小于等于target的元素。理解与熟练掌握此题,将为后续的二分相关题奠定扎实的基础。
2026-02-11 09:44:09
408
原创 LeetCode Hot100(47/100)——35. 搜索插入位置
给定一个有序数组nums和一个目标值target,请返回目标值在数组中的索引位置。如果目标值不存在于数组中,则返回它应该插入的位置索引,以保持数组的有序性。输入:nums = [1,3,5,6], target = 5输出:2输入:nums = [1,3,5,6], target = 2输出:1输入:nums = [1,3,5,6], target = 7输出:4数组内元素不重复。方法名称时间复杂度空间复杂度实现难度使用场景线性扫描法O(n)O(1)简单小规模数组。
2026-02-11 09:43:44
531
原创 LeetCode Hot100(46/100)——74. 搜索二维矩阵
fill:#333;important;important;fill:none;搜索二维矩阵思维框架数据结构特性行内升序行间连续增大解法思路二分查找映射为一维数组双指针逼近从右上角移动线性遍历暴力检测复杂度对比log m*nm+nm*n。
2026-02-11 09:43:18
524
原创 LeetCode Hot100(45/100)——79. 单词搜索
给定一个二维字符网格board和一个字符串word,判断该字符串是否能在网格中通过“上下左右相邻”的连续字母被拼出来。每个网格单元只能使用一次。输入:board = [输出:true此题是一个经典的DFS 回溯搜索题。接下来我们将从算法原理、图解流程、复杂度分析到完整代码分步解析。内容说明算法类型深度优先搜索(DFS)+ 回溯关键技巧标记访问状态、递归搜索、路径回退时间复杂度空间复杂度O(L)应用场景字母网格搜索、连通区域查找、迷宫路径等。
2026-02-11 09:42:50
694
原创 LeetCode Hot100(44/100)——39. 组合总和
内容要点算法类型回溯(DFS 搜索)重复控制每层递归从当前索引开始剪枝技巧如果当前和或当前数超过目标,立即停止可拓展性此思路可推广至「组合总和 II」「分割子集」等问题。
2026-02-10 09:43:56
461
原创 LeetCode Hot100(43/100)——22. 括号生成
LeetCode——Generate Parentheses(生成括号)给定一个正整数n,请生成所有可能且有效的括号组合,返回结果列表。例如,当n = 3。
2026-02-10 09:43:10
667
原创 LeetCode Hot100(42/100)——20. 有效的括号
要求判断该字符串中的括号是否成对出现且嵌套合法。栈顶与当前括号是否匹配?右括号检查栈顶是否匹配。时间复杂度 O(n)空间复杂度 O(n)
2026-02-10 09:42:30
828
原创 LeetCode Hot100(41/100)——17. 电话号码的字母组合
LeetCode - 电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。2 -> abc3 -> def4 -> ghi5 -> jkl6 -> mno7 -> pqrs8 -> tuv9 -> wxyz输入: digits = "23"输出: ["ad","ae","af","bd","be","bf","cd","ce","cf"]如果输入为空,返回空列表即可。对比项回溯法迭代法实现复杂度略高(递归结构)简单(循环拼接)思维方式。
2026-02-10 09:41:55
632
原创 LeetCode Hot100(40/100)——78. 子集
给定一个不含重复元素的数组nums,返回该数组所有可能的子集(幂集)。输入:nums = [1,2,3]输出:[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]子集的数量为2^n(n 为数组长度)。子集顺序不重要。子集问题是典型的组合枚举问题,关键在于理解「选与不选」的二元决策。回溯法最直观;迭代法实现简洁;位运算法最具数学美感。掌握这三种思路,将有助于解决其他与「组合 / 幂集 / 枚举」相关的问题,如:子集和问题(Subset Sum)
2026-02-09 10:24:12
468
原创 LeetCode Hot100(39/100)——208. 实现 Trie (前缀树)
它的核心思想是将字符串以「公共前缀」的方式组织在一棵树中,避免重复存储。由于 Trie 节点彼此共享公共前缀,它在存储大量相似单词时效率极高。为每个字符创建节点 a ->> p ->> p ->> l ->> e。的前缀,两者共享节点,从而节省存储空间。Trie 是一种非常有价值的数据结构,在。,在字符层级组织信息,快速定位前缀路径。,只需所有前缀节点存在即可返回。查找 a ->> p ->> p。返回 false(未标为结束)标记 isEnd=true。Trie 是一种用于。在上图中,我们插入了。
2026-02-09 10:23:39
1014
原创 LeetCode Hot100(38/100)——207. 课程表
特性BFS (Kahn 算法)DFS (三色标记法)核心思想贪心策略,剥洋葱皮,不断移除入度为0的节点递归回溯,一条路走到黑,检测是否回到原路实现难度中等,需要维护入度表和队列中等,需要理解递归状态空间开销队列 + 数组系统栈 + 数组适用场景仅仅需要判断可行性,或需要输出拓扑排序结果判断环的存在,或者需要检测特定路径直观性符合“先修先学”的直觉符合“探测回路”的逻辑。
2026-02-09 10:22:47
695
原创 LeetCode Hot100(37/100)——46. 全排列
撤销: path.removeLast(), used[i]=false。选择: used[i]=true, path.add(nums[i])找 i: 从右往左第一个 a[i] < a[i+1]找 j: 从右往左第一个 a[j] > a[i]空间: O(n)(递归栈, 原地操作)初始化 path, used, res。状态: 路径path, 标记used。空间: O(n·n!空间: O(1)(原地, 不含结果)path=[1,2,3] 收集。path=[1,3,2] 收集。空间: O(n)(不含结果)
2026-02-09 10:21:09
724
原创 LeetCode Hot100(36/100)——994. 腐烂的橘子
求出使所有橘子都腐烂所需的最少时间;如果不可能让全部橘子腐烂,则返回。每过一分钟,腐烂的橘子会扩散一层,最终所有橘子都腐烂,共用。统计总的新鲜橘子数量 freshCount。每次扩散减少 freshCount。有新鲜但无法腐烂 => -1。记录所有腐烂橘子的坐标入队。最短时间 => 层级扩散。没有新鲜橘子 => 0。这道题的本质是一个 “每分钟腐烂层向外扩散。判断是否还有新鲜橘子。
2026-02-07 16:30:53
477
原创 LeetCode Hot100(35/100)——200. 岛屿数量
题目描述:给你一个m × n的二维网格grid,由字符'1'(陆地)和'0'(水域)组成。请你计算网格中岛屿的数量。岛屿被水包围,可以由水平或垂直方向相邻的陆地连接形成。grid = [3解释:上图中存在三个岛屿。解法思路类型时间复杂度空间复杂度优缺点DFS递归搜索O(m×n)O(m×n)实现简单,逻辑直观;递归栈较深时占内存较大BFS队列搜索O(m×n)可避免递归栈溢出;代码稍繁琐Union-Find数据结构合并O(m×n×α)O(m×n)理论优雅;代码复杂;
2026-02-07 16:30:25
770
原创 LeetCode Hot100(34/100)——98. 验证二叉搜索树
给定一个二叉树,判断其是否是二叉搜索树(Binary Search Tree, BST)。节点的左子树只包含小于该节点值的节点;节点的右子树只包含大于该节点值的节点;所有左、右子树也必须是二叉搜索树。验证二叉搜索树是一个典型的 DFS + 逻辑约束问题,考察的是对树结构的理解与递归控制能力。若倾向于逻辑自顶向下判断,使用「区间限制法」;若倾向于性质自底向上验证,使用「中序升序法」。两种方法都能高效解决该题,需根据个人编程习惯灵活选择。
2026-02-07 16:29:42
672
原创 LeetCode Hot100(33/100)——102. 二叉树的层序遍历
题目链接LeetCode - Binary Tree Level Order Traversal(层序遍历)给定一个二叉树的根节点root,返回其节点值的层序遍历。即:按从上到下、从左到右的顺序访问所有节点。3/ \9 20/ \15 7[3],[9,20],[15,7]层序遍历的本质是广度优先搜索(BFS);队列是实现层序遍历的关键数据结构;DFS 版本提供了更递归的视角,适合理解层级关系;层序遍历是许多二叉树延伸操作(如右视图、最小层深度等)的基础。
2026-02-07 16:29:13
564
原创 LeetCode Hot100(32/100)——108. 将有序数组转换为二叉搜索树
核心要点说明解题思路分治法,将中间元素作为根数据结构二叉树算法特性递归构造,平衡且满足 BST 性质复杂度O(n) 时间,O(log n) 空间推荐实现递归,简单直观。
2026-02-06 09:49:27
640
原创 LeetCode Hot100(31/100)——543. 二叉树的直径
对每个节点node它的左子树高度记为leftH它的右子树高度记为rightH以该节点为根的路径长度 = leftH + rightH在递归过程中,我们可以维护一个全局变量,每次都尝试用当前的更新它。每次递归返回的是当前节点的子树高度。在递归过程中同时维护一个全局最大直径。不需要额外数据结构,仅依赖递归。
2026-02-06 09:48:55
528
原创 LeetCode Hot100(30/100)——101. 对称二叉树
解法类型思想概述是否递归时间复杂度空间复杂度特点递归法自顶向下比较左右子树是O(n)O(h)简洁、易理解迭代法队列成对存储节点比较否O(n)O(n)不依赖递归栈,更稳定。
2026-02-06 09:48:25
482
原创 LeetCode Hot100(29/100)——226. 翻转二叉树
LeetCode 226. 翻转二叉树给定一棵二叉树的根节点root,请翻转这棵二叉树,并返回它的根节点。所谓翻转,就是将每个节点的左子树与右子树交换。4/ \2 7/ \ / \1 3 6 94/ \7 2/ \ / \9 6 3 1解法思路实现方式时间复杂度空间复杂度特点递归法深度优先DFS自顶向下递归反转O(n)O(h)实现简洁优雅迭代法广度优先BFS层序遍历队列反转O(n)O(n)可避免递归栈溢出。
2026-02-06 09:47:32
602
原创 LeetCode Hot100(28/100)——104. 二叉树的最大深度
最大深度可看作树的高度问题,是树类面试必备题目之一;递归法语义最清晰,是最推荐的写法;迭代法(BFS/DFS)更偏向实战应用,可用于不允许递归的场景;掌握这题后,可以灵活应对如求最小深度、平衡二叉树、层序遍历等类似题目的扩展。
2026-02-05 09:47:06
575
原创 LeetCode Hot100(27/100)——94. 二叉树的中序遍历
递归本质是调用栈来管理访问顺序。每到一个节点,先递归访问它的左子树,再处理当前节点,最后访问它的右子树。Morris遍历通过在树中建立临时线索(Thread),在不使用栈或递归的情况下也能实现中序遍历。初始化栈,当前节点为root。将当前节点入栈,移动到左节点。当前节点不为空或栈不为空?给定一个二叉树的根节点。Morris遍历(进阶)访问当前节点,加入结果集。访问节点并转向右子树。
2026-02-05 09:46:18
632
原创 LeetCode Hot100(26/100)——24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。不能仅仅修改节点内部的值,而是需要实际交换节点。输入:1 -> 2 -> 3 -> 4输出:2 -> 1 -> 4 -> 3递归法实现更简洁,思想优雅,但对栈空间要求较高。迭代法较为实际,性能稳定且空间效率更好。无论哪种方式,关键在于正确处理指针链接关系的变化。推荐使用迭代法——更安全,不依赖系统调用栈。
2026-02-05 09:44:53
626
原创 LeetCode Hot100(25/100)——2. 两数相加(链表)
LeetCode 两数相加给定两个非空的链表,它们表示两个非负整数。数字按照逆序存储在链表中,每个节点只存储单个数字。请将这两个数相加,并以相同形式(逆序链表)返回一个新的链表。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807。
2026-02-05 09:43:46
651
原创 LeetCode Hot100(24/100)——21. 合并两个有序链表
解法优点缺点适用场景迭代法时间效率高;不占用额外栈空间代码略冗长大多数实际业务逻辑中推荐使用递归法代码简洁美观;逻辑清晰可能导致栈溢出递归深度较小的场景,或用于教学演示。
2026-02-04 09:43:01
605
原创 LeetCode Hot100(23/100)——142. 环形链表 II
解法思路时间复杂度空间复杂度适用场景哈希集合法记录访问过的节点O(n)O(n)快速验证思路快慢指针法数学+双指针O(n)O(1)实际应用最优方案。
2026-02-04 09:41:49
642
原创 LeetCode Hot100(22/100)——141. 环形链表
给定一个单链表的头结点head,判断这个链表中是否存在环。如果链表中存在某个节点,通过不断地next指针可以再次到达该节点,就说明链表中存在环。👉存在环 ⇒true无环 ⇒false方法原理时间复杂度空间复杂度适用场景哈希表法使用集合检测重复节点O(n)O(n)简单易懂但消耗额外空间快慢指针法双指针运动相遇判环O(n)O(1)更高效,推荐使用。
2026-02-04 09:41:04
637
原创 LeetCode Hot100(21/100)——234. 回文链表
解法核心思路时间复杂度空间复杂度特点数组辅助法用数组保存节点值再比较O(n)O(n)简单易理解快慢指针+反转法找中点后反转后半部分比较O(n)O(1)高效且空间最优。
2026-02-04 09:40:36
601
原创 服务端性能优化常见措施
服务端性能优化不是一蹴而就的,而是一个发现瓶颈 -> 分析原因 -> 实施优化 -> 效果验证的闭环过程。核心优化思维导图:快:利用缓存、索引、SSD。稳:限流、熔断、降级(Sentinel/Hystrix)。准:利用 APM 工具(SkyWalking, Prometheus)精准定位慢调用。最后建议:不要为了优化而优化。过早优化是万恶之源。应基于监控数据(Observability),优先解决系统中最痛的点。
2026-02-03 09:50:11
897
原创 从代码层面封死「越权访问」漏洞
Who?我是用userId参数,还是用的 Session/Token?Whose?查询数据库时,加上了吗?What?入参对象(DTO)里是否混入了role或balance等敏感字段?Rule?是否检查了数据当前的状态允许执行该操作?
2026-02-03 09:49:22
596
原创 RocketMQ 生产实战:常见问题剖析与故障排查
RocketMQ 的稳定性治理是一个系统工程。防丢失:靠的是同步刷盘、同步复制和优雅的异常处理。防重复:靠的是业务层的幂等设计。防积压:靠的是合理的队列规划、快速的消费逻辑以及紧急情况下的扩容方案。
2026-02-03 09:47:24
647
原创 RocketMQ高可用架构与高级特性
HA 架构:通过 DLedger/Raft 解决了自动故障转移的难题。事务消息:通过 Half Message + 回查机制,优雅地解决了分布式数据一致性问题。延时消息:通过“Topic 替换 + 简化的时间轮”思想,在性能和功能间取得了平衡。过滤机制:通过 Broker/Client 两级过滤及 BloomFilter 优化,保证了投递的精准与高效。
2026-02-03 09:46:44
647
原创 RocketMQ 客户端原理解析:从发送到消费
既然本质是 Pull,RocketMQ 就可以在客户端做流控。在准备去 Broker 拉取消息之前,会先检查(本地处理队列)的状态。如果出现以下情况,消费者会暂停拉取数量堆积:本地缓存的消息数 > 1000 条(默认)。内存占用:本地缓存的消息总大小 > 100MB(默认)。跨度过大:本地缓存的消息最小 Offset 和最大 Offset 差值 > 2000(防止大量未被消费的消息堆积,通常发生在顺序消费场景)。// 源码逻辑简述 (DefaultMQPushConsumerImpl.java)
2026-02-02 11:43:09
790
原创 Redis分布式限流技术原理与实战
🔹 限流是高可用系统的“安全阀”,能有效削峰、保护服务稳定。🔹 Redis 限流凭借其高性能、原子操作特性,是业界最常用的分布式限流手段。网关限流兜底 + Redis 全局限流 + 应用层防御打造“外防恶流、内稳业务”的坚固防线。
2026-02-02 11:42:42
1079
原创 Redis 大 Key问题解析与治理
项目操作建议检测使用监控删除使用UNLINK或批量删除分片拆分大 Key 为多个小 Key预防设计时控制 Key 大小与元素数监控定期扫描并配置告警备份备份前清理或拆分大 Key。
2026-02-02 11:42:14
747
原创 解读华为云Redis Proxy集群规格:架构、规格与带宽性能
即理论上传输速率1250 MB/秒。性能维度指标实践值总容量64GB(主节点)实际可用50–55GB并发能力16–32万QPS稳定支撑电商/直播场景带宽10Gbps(集群级)支撑高并发 + 快速同步高可用1主2从故障秒级切换可扩展性分片可在线扩容0停机扩展。
2026-02-02 11:41:34
664
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅