- 博客(151)
- 收藏
- 关注
原创 【力扣100题】97.划分字母区间
思路平均时间最坏时间空间评价哈希表O(n)O(n)O(n)可行但稍慢数组O(n)O(n)O(1)最优项目内容核心思想两遍遍历:第一遍记录最后位置,第二遍根据最后位置切片段关键判断end == i 时切割最优时间O(n)最优空间O(1)面试加分能解释「片段内所有字符的最后位置都不会超出片段边界」
2026-06-14 22:42:43
55
原创 【力扣100题】96.跳跃游戏 II
思路平均时间最坏时间空间评价动态规划O(n^2)O(n^2)O(n)会超时BFSO(n^2)O(n^2)O(n)需要队列贪心(反向)O(n)O(n^2)O(1)最坏 O(n^2)贪心(正向)O(n)O(n)O(1)最优项目内容核心思想贪心:维护「当前边界」和「下一步最远」两个变量关键判断i == curEnd 时,需要再跳一次最优时间O(n)最优空间O(1)面试加分能解释这是 BFS 层序遍历的空间优化版本。
2026-06-14 17:30:24
157
原创 【力扣100题】95.跳跃游戏
思路平均时间最坏时间空间评价模拟跳跃O(n^2)O(n^2)O(n)会超时BFSO(n^2)O(n^2)O(n)需要队列贪心O(n)O(n)O(1)最优项目内容核心思想贪心:维护「当前能到达的最远位置」关键判断i > maxlen -> 不可达最优时间O(n)最优空间O(1)面试加分能解释「最远距离」的递推关系。
2026-06-14 17:23:48
136
原创 【力扣100题】94.买卖股票的最佳时机
思路平均时间最坏时间空间评价暴力枚举O(n^2)O(n^2)O(1)会超时前缀最小值O(n)O(n)O(1)最优动态规划O(n)O(n)O(n)可行但浪费空间项目内容核心思想前缀最小值:边遍历边记录历史最低价关键公式最优时间O(n)最优空间O(1)面试加分能解释「在最低价买入、当前价卖出」的思想。
2026-06-14 17:11:30
188
原创 【力扣100题】93.数据流的中位数
思路平均时间最坏时间空间评价排序数组O(n)O(n)O(n)简单但慢插入排序O(n)O(n)O(n)无改进双堆对顶O(log n)O(log n)O(n)最优项目内容核心思想双堆对顶:左堆存小的一半,右堆存大的一半关键技巧插入时先右后左,保证左堆最大值 <= 右堆最小值最优时间O(log n)最优空间O(n)面试加分能画图解释清楚左右堆的平衡关系。
2026-06-14 15:51:41
177
原创 【力扣100题】92.前 K 个高频元素
思路平均时间最坏时间空间稳定性排序后统计O(n log n)O(n log n)O(n)稳定堆排序O(n log k)O(n log k)O(n)不稳定桶排序O(n)O(n)O(n)不稳定快速选择O(n)O(n^2)O(n)不稳定项目内容最优解桶排序 O(n) 时间、O(n) 空间核心思想用桶下标直接对应出现次数,省去堆关键技巧频率范围 [1, n] 确定,可用下标直接寻址面试建议优先给出桶排序,能想到堆排序是加分项。
2026-06-14 15:23:08
199
原创 【力扣100题】91.数组中的第K个最大元素
方法时间复杂度空间复杂度适用场景快速选择O(n) 平均O(1)通用场景,要求 O(n) 时首选小顶堆O(n log k)O(k)大数据流,TOP-K 问题大顶堆O(n log n)O(1)需要完整排序时排序后取值O(n log n)O(1)简单直接,代码简洁计数排序O(n + R)O®值范围小(如本题 -104~104)时间复杂度对比(假设 n=100000, k=100):快速选择: O(n) = 100000 ★最优。
2026-06-14 14:21:19
186
原创 【力扣100题】90.寻找重复数
方法时间复杂度空间复杂度推荐指数Floyd 判圈O(n)O(1)★★★★★二分查找O(n log n)O(1)★★★★☆位运算O(n)O(1)★★★☆☆哈希表O(n)O(n)★☆☆☆☆Floyd 判圈的优势:1. O(1) 空间,不修改数组2. 时间复杂度 O(n)3. 代码简洁4. 体现数学思维(环形链表检测)为什么快慢指针能检测环?- 快指针走两步,慢指针走一步- 如果有环,快慢指针一定相遇- 数学保证要点说明核心思想。
2026-06-12 20:43:43
108
原创 【力扣100题】89.下一个排列
方法时间复杂度空间复杂度推荐指数字典序算法O(n)O(1)★★★★★暴力枚举O(n!* n)O(n!★☆☆☆☆字典序算法的核心思想:1. 找破坏点:从后往前找第一个升序对- 破坏点是全局的最高位变化点- 在它之后的部分是降序的2. 找替换点:从后往前找第一个大于破坏点元素的值- 因为是从后往前找,所以找到的是最小的比破坏点大的值3. 交换 + 翻转:- 交换后,[破坏点+1, 末尾) 仍然是降序- 反转后变成升序,得到最小排列要点说明核心思想。
2026-06-12 17:33:00
164
原创 【力扣100题】88.多数元素
方法时间复杂度空间复杂度推荐指数Boyer-Moore 投票算法O(n)O(1)★★★★★排序后取中位数O(n log n)O(1)★★★☆☆哈希表统计O(n)O(n)★★☆☆☆为什么投票算法是最优解?1. 时间 O(n),满足要求2. 空间 O(1),满足要求3. 代码简洁4. 体现数学思维(票数相消)投票算法的正确性证明:- 多数元素出现次数 > n/2- 将数组分成两部分:多数元素部分和其他元素部分- 多数元素数量 > 其他元素数量。
2026-06-12 17:12:25
298
原创 【力扣100题】87.只出现一次的数字
方法时间复杂度空间复杂度推荐指数异或运算O(n)O(1)★★★★★哈希表O(n)O(n)★★★☆☆排序后遍历O(n log n)O(1)★★☆☆☆为什么异或是最优解?1. 时间 O(n),满足要求2. 空间 O(1),满足要求3. 代码极简,一行搞定4. 充分利用数学性质异或的物理意义:- 相同为 0,不同为 1- 出现两次的数字,每一位都被抵消- 只剩出现一次的那个数字要点说明核心思想异或运算:相同为0,不同为1关键性质。
2026-06-12 16:59:22
169
原创 【力扣100题】86.柱状图中最大的矩形
维度 | 内容 |考察知识点| 单调栈、边界计算 |难度| 困难 |核心思维| 栈顶是当前高矩形,右边界已知,左边界是栈顶下方 |关键技巧| 末尾哨兵、栈底哨兵、弹栈计算面积 |推荐解法| 方法一(单调递增栈) |变形题| 最大矩形(二维)、接雨水 |柱状图最大矩形的核心是单调递增栈:弹栈时栈顶柱子的"右边界"是当前遍历位置,"左边界"是新的栈顶,宽度 = right - left - 1。哨兵技巧是简化代码的关键。
2026-06-12 00:49:49
268
原创 【力扣100题】85.每日温度
维度内容考察知识点单调栈、-next Greater Element难度中等核心思维用栈维护"等待更高温的索引",O(1) 找到答案关键技巧逆序遍历 + 单调递减栈推荐解法方法一(逆序单调递减栈)或方法二(正序单调递增栈)变形题下一个更小元素、左边第一个更大元素、环形数组单调栈的核心是"栈顶元素是当前元素要找的答案",维护单调性保证每个元素最多入栈一次、出栈一次,达到 O(n) 时间复杂度。
2026-06-12 00:29:11
228
原创 【力扣100题】84.字符串解码
维度内容考察知识点栈、字符串解析、递归难度中等核心思维用栈保存外层上下文,内层先处理完再处理外层关键技巧数字累加、字符串拼接、move语义推荐解法方法一(pair栈)或方法二(双栈)边界情况多位数k、嵌套层数、空字符串字符串解码的核心是用栈保存"遇到 ‘[’ 时已经解析出的部分",等内层 ‘]’ 处理完后再拼回去。栈的LIFO特性天然保证了"先内后外"的处理顺序。
2026-06-12 00:12:12
346
原创 【力扣100题】83.最小栈
维度内容考察知识点栈的设计、辅助数据结构难度中等核心思维用空间换时间,用辅助栈记录历史最小值关键技巧push/pop 时同步维护辅助栈推荐解法方法一(双栈)- 标准、清晰、可靠面试加分方法三(差值法)- 展示思维深度最小栈的核心是用一个辅助栈"同步记录每个位置的当前最小值",这样 getMin 永远是 O(1)。空间换时间,是算法设计中永恒的trade-off。
2026-06-11 23:31:43
231
原创 【力扣100题】82.有效的括号
维度内容考察知识点栈(Stack)的应用难度简单代码框架遍历 + 栈操作关键技巧利用栈的LIFO特性,保证匹配顺序边界情况奇数长度、栈空、右括号不匹配变形题返回最小插入数、最长有效长度推荐解法方法一(STL栈)或方法二(数组模拟)括号匹配是栈的入门经典题,核心就是"最近未匹配的左括号 = 当前右括号应该匹配的对象",用栈的LIFO特性天然实现这个逻辑。生产代码推荐使用方法一(STL栈),代码可读性高且性能足够。
2026-06-11 21:27:25
203
原创 【力扣100题】81.寻找两个正序数组的中位数
要点说明核心思想将中位数问题转化为"找第 k 小的数",用二分查找优化关键技巧每次比较 nums1[mid1] 和 nums2[mid2],排除 k/2 个不可能是第 k 小的元素奇偶处理奇数直接返回第 (m+n+1)/2 小的数;偶数返回第 (m+n)/2 小和第 (m+n)/2+1 小的数的平均值时间复杂度空间复杂度O(log(m+n)),递归栈防溢出使用 min(i + k/2, …) 防止数组越界。
2026-06-11 00:38:45
178
原创 【力扣100题】80.寻找旋转排序数组中的最小值
原数组:[0, 1, 2, 4, 5, 6, 7](n=7)旋转 k 次后的数组:[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]旋转点(最小值位置)分析:旋转 0 次:[0,1,2,4,5,6,7] 最小值在位置 0旋转 1 次:[7,0,1,2,4,5,6] 最小值在位置 1旋转 2 次:[6,7,0,1,2,4,5] 最小值在位置 2旋转 3 次:[5,6,7,0,1,2,4] 最小值在位置 3。
2026-06-11 00:29:10
204
原创 【力扣100题】79.搜索旋转排序数组
要点说明核心思想利用旋转数组被分成两段有序的特性,每次排除一半元素关键判断通过 nums[left] 和 nums[mid] 的关系判断哪段有序旋转点最小元素的位置,把数组分成两段时间复杂度O(log n)空间复杂度O(1)防溢出使用 mid = left + (right - left) / 2。
2026-06-11 00:22:04
176
原创 【力扣100题】78.在排序数组中查找元素的第一个和最后一个位置
要点说明核心思想利用数组有序,通过二分查找找左边界(第一个 >= target)和右边界(第一个 > target)找左边界第一个 >= target 的位置找右边界第一个 > target 的位置 = 第一个 >= target+1 的位置减 1防溢出使用 mid = left + (right - left) / 2时间复杂度O(log n)空间复杂度O(1)关键技巧用 target+1 间接找右边界,避免单独处理。
2026-06-10 23:53:34
181
原创 【力扣100题】77.搜索二维矩阵
要点说明核心思想利用矩阵的单调性,从特定角落出发,每次排除一行或一列推荐起点左下角或右上角时间复杂度O(m+n) 或 O(log(m*n))空间复杂度O(1)关键性质每行递增 + 每行首元素大于前一行尾元素 = 矩阵整体有序。
2026-06-10 23:44:16
240
原创 【力扣100题】76.搜索插入位置
要点说明核心思想利用有序数组的单调性,每次排除一半元素,将搜索范围缩小到 O(log n)关键变量l(左边界)、r(右边界)、mid(中间位置)终止条件标准版 l > r;左边界版 l == r返回值l 即为插入位置(第一个大于等于 target 的位置)时间复杂度O(log n)空间复杂度O(1)防溢出技巧使用代替。
2026-06-10 23:31:21
213
原创 消息队列与Kafka详解
消息队列是一种遵循FIFO原则的队列结构,主要用于实现异步处理、削峰填谷、服务解耦等功能。Kafka作为分布式消息队列系统,具有高吞吐量、可恢复性和缓冲能力等优势。其核心架构包括Broker集群、Topic分区机制和副本同步策略,通过分区实现并行消费,通过副本保证高可用性。消息在分区内按Offset有序存储,消费者通过消费组协作处理消息。Kafka的设计有效解决了系统间通信的效率与可靠性问题。
2026-06-09 02:32:06
1304
原创 图床项目实现:文件分享取消功能 + 文件共享与删除 + 共享排行榜等功能的完善
功能说明文件分享取消用户可取消已分享的文件,从共享列表移除文件共享与删除实现文件分享、文件删除(含FastDFS物理删除)共享排行榜Redis Zset实现下载量排行榜,支持分页查询文件分享:通过md5+filename判断是否重复分享,同名同内容不能重复分享取消分享:从share_file_list删除记录,同时清理Redis Zset和Hash文件删除:级联删除user_file_list、share_file_list、file_info,count归零时从FastDFS物理删除。
2026-06-07 01:51:22
153
原创 图床项目实现:MD5秒传 + 个人文件列表 + 图片分享等功能的完善
功能说明MD5秒传文件去重,相同内容只存一份,用户数+1即可秒传个人文件列表分页查询用户所有文件,支持数量统计图片分享生成唯一分享链接,支持提取码和浏览量统计本次更新实现了三个核心功能:MD5秒传:通过文件内容MD5去重,相同文件只存储一份,多用户引用时count+1,大幅节省存储空间个人文件列表:支持分页查询用户所有文件,关联file_info获取文件详情,code=0表示成功图片分享:生成唯一分享链接urlmd5,支持浏览量统计,可查看分享者的所有分享图片。
2026-06-06 20:36:17
595
原创 图床项目实现:注册登录 + 文件上传等功能的完善
用户上传文件时,客户端先计算文件 MD5。如果服务器上已存在相同 MD5 的文件(其他用户上传过),直接引用该文件记录,无需真正上传,节省带宽和时间。功能实现方式关键文件注册MySQL 预处理插入,检测用户名重复登录MySQL 查密码 + Redis 存 Token(UUID,24h过期)Token 验证Redis Get(key=token) -> 对比用户名文件上传nginx 临时目录 -> fork/execvp 上传 FastDFS -> 写 MySQLMD5 秒传。
2026-06-05 21:27:25
317
原创 图床项目实现:Muduo 网络框架学习以及登录注册功能实现
/ HTTP 响应格式宏// 组成:状态行 + 响应头 + 空行 + 响应体// JSON 响应格式// HTML 响应格式// 错误响应格式HTTP/1.1 200 OK ← 状态行Connection:close ← 响应头(关闭连接)Content-Length:12 ← 响应头(body 长度)Content-Type:application/json... ← 响应头(内容类型)← 空行(\r\n\r\n){"code": 0} ← 响应体(JSON)概念说明。
2026-06-05 02:51:38
245
原创 【力扣100题】75.N 皇后
要点详情算法回溯 + 冲突检测核心函数isValid() 检测列冲突和斜线冲突搜索方式按行放置,每行只放一个皇后剪枝策略不合法位置直接跳过时间复杂度O(n!空间复杂度O(n^2)
2026-05-31 01:17:38
236
原创 【力扣100题】74.分割回文串
/ 所有合法分割方案// 当前正在构建的方案变量类型用途ans二维结果,第一维是不同方案,第二维是每个方案中的子串pathvector一维路径,记录当前分割方案nint字符串长度参数含义i当前处理到的位置(当前子串的结束位置)start当前子串的起始位置捕获外部变量 n, ans, pathi 和 start 的关系当前子串是 s[start..i]下一个子串起始位置是 i+1要点详情算法回溯(选择-递归-撤销)核心函数is_palinedrome() 判断回文搜索方式。
2026-05-31 00:59:59
187
原创 【力扣100题】73.单词搜索
dic[0]= {0, 1} --> 向右dic[1]= {1, 0} --> 向下dic[2]= {0, -1} --> 向左dic[3]= {-1, 0} --> 向上要点说明核心算法深度优先搜索 + 回溯关键技巧访问标记 + 回溯恢复剪枝策略字符不匹配提前返回时间复杂度O(MN4^L)空间复杂度O(L)注意事项每一步都要检查边界访问标记和回溯是配套的找到一个解就立即返回,不要继续搜索。
2026-05-31 00:27:14
249
原创 MySQL缓存策略与读写分离深度剖析
在互联网系统中,数据库往往是性能瓶颈所在。随着用户量增长,数据库的读写压力急剧增加,如何提升MySQL的访问性能成为后台开发必须掌握的核心技能。系统性能瓶颈分布(典型互联网架构):用户请求 --> 网关 --> 业务逻辑层 --> 数据库层v这里是性能瓶颈80%的系统延迟集中在这里本文从缓存策略读写分离连接池三个方向,深入剖析MySQL性能优化的核心方案。高并发系统性能优化架构:| 用户请求 || |v v| 接入层/网关 | | 负载均衡 || |v v。
2026-05-30 01:55:44
928
原创 MySQL事务原理深度剖析
MySQL事务是数据库核心机制之一,理解事务原理对于后台开发、数据库优化、面试准备都至关重要。本文将从零开始,深度剖析MySQL事务的四大特性、隔离级别、MVCC机制、锁机制以及死锁处理。事务(Transaction)是一组逻辑上不可分割的SQL操作集合,这些操作要么全部执行,要么全部不执行。为什么需要事务?考虑一个经典的银行转账场景:从账户A转100元到账户B。-- 假设原始状态:A账户余额1000元,B账户余额500元-- 第一步:扣款-- 第二步:收款。
2026-05-29 19:39:36
680
原创 MySQL 索引原理与 SQL 优化
知识点核心要点索引类型主键索引、唯一索引、普通索引、组合索引、全文索引B+树特点多路平衡搜索树,叶子节点互连,非叶子节点只存索引聚集索引叶子节点存储完整数据,主键索引,一表只有一个辅助索引叶子节点存储索引值+主键,需要回表回表查询辅助索引找到主键,再去聚集索引查找完整数据LRU 管理缓存页,Free/Flush/LRU 三个链表缓存辅助索引变更,异步合并,减少随机 IO最左匹配组合索引从左到右匹配,遇到 > < BETWEEN LIKE % 停止覆盖索引辅助索引直接返回数据,无需回表,性能最优索引下推。
2026-05-29 00:40:32
1176
1
原创 【力扣100题】72.括号生成
要点说明核心思想回溯 + 合法性检查关键条件放右括号:right < left终止条件right == n位置计算时间复杂度O(4^n / sqrt(n)),卡特兰数空间复杂度O(n)C++23 语法显式 lambda 模板参数。
2026-05-28 15:41:20
140
原创 【力扣100题】71.组合总和
要点说明核心思想回溯 + 剪枝关键参数sum(当前和)、index(起始位置)重复选择传 i 而非 i+1剪枝条件去重机制index 参数控制起点,保证有序不重复时间复杂度指数级空间复杂度O(n)
2026-05-28 12:35:17
152
原创 【力扣100题】70.电话号码的字母组合
是完美转发,让 lambda 能够调用自身index表示当前正在处理第几个数字(从0开始)要点内容数据结构数组建立映射表核心算法回溯(选择 → 递归 → 撤销)时间复杂度O(4^n)空间复杂度O(n)关键点1边界条件处理(空字符串)关键点2字符转数字下标(关键点3回溯三步曲:选、递归、撤销变形方向限制数量、权重随机、返回编号。
2026-05-28 12:23:50
144
原创 【力扣100题】69.子集
要点内容核心思想回溯/位运算,枚举每个元素选或不选关键点每一层都记录当前子集到 ans遍历方式从 index 开始,避免重复子集时间复杂度O(2^n * n)空间复杂度O(n)变形位运算:用二进制位表示子集子集问题是经典的回溯/枚举问题,核心思想是每个元素都有选或不选两种情况,共 2^n 种子集。通过回溯或位运算可以高效枚举所有子集。
2026-05-28 02:50:23
148
原创 【力扣100题】68.全排列
要点内容核心思想回溯(DFS),枚举所有可能的排列关键变量path(当前排列)、used(使用标记)终止条件时间复杂度O(n!* n)空间复杂度O(n)关键点选择 → 递归 → 撤销易错点used 数组要及时更新和恢复全排列是经典的回溯问题,通过深度优先搜索枚举所有可能的排列,利用 used 数组避免在同一个排列中重复选择元素。
2026-05-28 02:48:55
190
原创 【力扣100题】67.实现 Trie(前缀树)
要点内容核心思想前缀树,共享前缀,节省空间节点结构son[26] + end(是否完整单词)操作复杂度应用场景自动补全、拼写检查、前缀匹配空间复杂度O(N*L),最坏情况每个字符一个节点关键点根节点不代表字符,是树的入口易错点区分完整单词搜索和前缀搜索Trie(字典树)是处理字符串前缀匹配的高效数据结构,通过共享前缀大大减少存储空间,插入和查询都是 O(L) 时间复杂度。
2026-05-28 02:29:24
332
原创 【力扣100题】66.课程表
要点内容核心思想拓扑排序,检测有向图是否有环建图方式p[1] -> p[0](学 p[1] 才能学 p[0])环检测三色标记:0=未访问,1=正在访问,2=已完成检测条件遇到正在访问的节点(颜色=1)说明有环时间复杂度O(V + E)空间复杂度O(V + E)易错点颜色标记要正确区分三种状态课程表是经典的拓扑排序问题,将课程依赖关系建模为有向图,通过 DFS 检测环来判断是否能完成所有课程。
2026-05-28 01:56:43
368
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅