自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(198)
  • 收藏
  • 关注

原创 C++ 从零实现Json-Rpc 框架

本文介绍了一个基于C++实现的JSON-RPC远程调用框架,采用muduo网络库和JsonCpp进行开发。文章首先概述了RPC的基本概念,然后详细阐述了框架的技术选型、开发环境搭建以及第三方库的使用方法。在核心设计部分,重点讲解了抽象层、具象层和业务层的分层架构,以及服务端和客户端的模块划分与实现细节。框架支持同步/异步调用、服务注册发现、发布订阅等功能,并通过日志系统、UUID生成等辅助工具提升开发效率。测试案例展示了框架在实际场景中的应用效果。附录部分补充了工厂模式、建造者模式等设计模式知识,为理解框架

2026-01-13 19:51:25 943

原创 [hot100 NO.96~100]

这篇摘要介绍了5个经典算法题:96题找出数组中只出现一次的数字;97题寻找出现次数超半数的多数元素;98题实现三色排序(荷兰国旗问题);99题生成数组的下一个字典序排列;100题检测数组中唯一的重复数字。这些问题涵盖了位运算、投票算法、双指针等典型解法,适合算法练习和面试准备。

2026-01-25 18:29:15 197

原创 [hot100 NO.91~95]

本文总结了5种典型动态规划问题:不同路径、最小路径和、最长回文子串、最长公共子序列和编辑距离。重点介绍了空间优化技巧,指出通过仅保存上一行和当前行前一个值,可将二维DP数组优化为一维,有效降低空间复杂度。这些优化方法在保持时间复杂度的同时,显著提升了算法效率。

2026-01-24 21:31:53 281

原创 [hot100 NO.81~90]

本文总结了动态规划经典算法题解,涵盖爬楼梯、杨辉三角、打家劫舍等基础题型,以及完全平方数优化、零钱兑换等进阶问题。特别提供了最长递增子序列的两种解法(动态规划与优化后的贪心+二分法),并包含乘积最大子数组、分割等和子集等变式题型,最后以最长有效括号问题收尾,呈现了动态规划从基础到高阶的完整解题思路。(149字)

2026-01-23 19:10:55 222

原创 [hot100 NO.77~80]

贪心算法实战摘要🔥 股票买卖:在价格最低时买入,最高时卖出(77题) 跳跃游戏: 78题通过维护最大可达位置mx判断能否到达终点 79题通过cur_right和next_right记录当前/下次跳跃范围,计数最少跳跃次数 典型用例分析:数组[2,3,1,1,4]需2次跳跃(0→1→4) 字母划分(80题): 通过维护字符最后出现位置,当遍历到当前位置等于最大边界时分割区间 贪心核心:每步选择当前最优解,通过局部最优达到全局最优。关键点在于正确设计状态变量(如mx、cur_right)和更新策略。

2026-01-21 12:58:56 359

原创 [hot100 NO.73~75]

本文通过三个堆操作案例展示了如何维护数据流的中位数:1)初始空堆时插入1,自动平衡为A=[1];2)插入2时保持A/B大小相等(偶数个元素);3)插入3后形成A=[2,3]/B=[2]的奇数平衡状态。关键点在于通过堆顶元素交换和大小比较(A.size()≤B.size()+1)动态维持中位数计算所需的结构平衡,其中最大堆A和最小堆B的协同操作确保了高效的中位数查询能力。

2026-01-19 21:55:29 92

原创 [Redis——lesson1.初识 Redis :分布式系统]

本文介绍了从单机架构到分布式系统的演进过程。单机架构是最基础的形态,但随着业务增长会遇到硬件资源瓶颈,解决方案包括"开源节流"、应用数据分离、负载均衡等。随后阐述了读写分离、冷热分离、垂直分库等分布式架构设计,通过主从数据库、缓存服务器等方式提升性能。最后讨论了微服务架构,虽然增加了系统复杂性,但解决了人员组织问题,支持功能复用和灵活部署。文章展示了不同业务规模下的技术选型思路,从单机到分布式的演进路径。

2026-01-19 19:36:55 663

原创 [hot100 NO.68~72]

本文介绍了栈在解决字符串解码和温度问题中的应用。字符串解码使用辅助栈处理嵌套结构,通过数字栈和字符串栈协同工作,实现"3[a2[c]]"→"accaccacc"的转换。每日温度问题展示了两种单调栈解法:正向遍历为栈内元素结算答案(后结算),反向遍历直接为当前元素找答案(先结算)。柱状图最大矩形问题则通过维护单调递增栈,高效计算每个柱子能构成的最大矩形面积。这些解法充分展现了栈在处理嵌套结构和区间最值问题中的优势。

2026-01-19 12:49:52 1012

原创 [hot100 NO.62~67]

🔥二分查找算法精要🔥 本文系统梳理了二分查找的经典题型(62-67题),涵盖: 基础应用(搜索插入位置) 二维矩阵搜索(两种解法) 边界查找(元素首末位置) 旋转数组处理(搜索与最小值查找) 中位数求解(双数组场景) 通过典型用例[3,4,5,1,2]的分步拆解,清晰展示了: 指针调整逻辑(left/right移动) 子数组判定标准(与右边界比较) 循环终止条件(left==right) 最小值定位原理 (字数:149)

2026-01-17 20:47:28 260

原创 [hot100 NO.55~61]

本文总结了回溯算法在解决全排列、子集、N皇后等经典问题中的应用。重点分析了N皇后问题的关键数据结构:res存储最终解,colUsed标记列占用,diag1/diag2标记对角线占用,path记录当前棋盘状态。这些数据结构通过位标记有效避免了皇后间的冲突,是回溯剪枝的核心实现方式。

2026-01-14 18:31:06 307

原创 [hot100 NO.51~54]

本文对比了图论中DFS和BFS两种遍历方法的特性及应用场景。DFS采用递归实现,代码简洁但空间复杂度较高;BFS使用队列实现,空间更优但代码稍复杂。二者时间复杂度相同,但DFS在大规模数据时可能栈溢出。文章还分析了岛屿数量、腐烂橘子等典型问题的解法选择策略,指出DFS适合小规模数据/简洁需求,BFS适合大规模数据/层序需求。最后介绍了课程表问题的两种解法(入度表和DFS)以及Trie树的应用场景。

2026-01-11 12:18:04 586

原创 [hot100 NO.43~50]

本文总结了二叉树常见问题的解法对比:1)验证二叉搜索树可采用中序遍历或递归边界检查;2)找第K小元素推荐迭代中序遍历实现提前终止;3)右视图问题BFS层序遍历更直观;4)二叉树展开为链表时,迭代法空间最优;5)路径总和III问题中,前缀和回溯法时间复杂度最优(O(n)),适合面试场景。同时提供了LCA和最大路径和问题的解法参考,涵盖递归、迭代、DFS/BFS等多种实现方式,并分析各方法的时间/空间复杂度及适用场景。

2026-01-06 15:50:56 354

原创 [C++——lesson41.「智能指针」]

本文系统介绍了C++智能指针的核心概念与应用。首先阐述了手动内存管理的缺陷及智能指针的必要性,重点剖析了内存泄漏的危害。随后详细讲解了智能指针的RAII实现原理,对比分析了auto_ptr、unique_ptr和shared_ptr的特性与适用场景,特别针对shared_ptr的引用计数机制和循环引用问题给出了解决方案。文章还涵盖了定制删除器的使用方法和常见面试题解析。最后总结指出:智能指针是C++内存管理的利器,正确理解其原理和差异是高效使用的关键,其中unique_ptr适合独占所有权场景,shared

2025-12-25 15:15:00 1041

原创 [C++——lesson40.——「C++『异常』」]

本文系统介绍了C++异常处理机制,包括异常的基本概念、使用方法和体系设计。文章首先对比了C语言和C++的异常处理方式,重点讲解了C++中try-catch-throw的异常处理框架。通过实例演示了异常的抛出、捕获、重新抛出等操作,并强调了异常安全的重要性。同时,文章详细阐述了C++标准库异常体系和自定义异常体系的设计方法,分析了异常的优缺点。最后指出,尽管异常存在执行流混乱等缺点,但在现代软件开发中仍具有重要价值,建议合理规范使用异常处理机制。全文内容详实,既包含基础概念讲解,又提供实际应用指导,对理解和运

2025-12-24 13:30:00 956

原创 [C++——lesson39.——「C++11『lambda表达式 ‖ 线程库 ‖ 包装器』」]

本文深入探讨了C++11中的三大核心特性:lambda表达式、线程库和包装器。 lambda表达式部分介绍了其语法结构、使用场景及实现原理,展示了如何替代传统仿函数实现简洁的回调函数,并通过捕捉列表实现变量捕获。文章对比了lambda与传统仿函数的性能差异,揭示了底层都是通过生成空类实现的本质。 线程库章节详细讲解了thread类及其配套工具,包括互斥锁(mutex)、条件变量(condition_variable)和原子操作(atomic)。通过实际代码演示了线程创建、同步机制,以及并行与串行操作的性能对

2025-12-23 18:08:15 1081

原创 [hot100 NO.37~42]

本文总结了二叉树相关算法,包括:1)计算最大深度(后序DFS/层序BFS);2)翻转二叉树(递归/辅助栈);3)判断对称性;4)求直径(递归/动态规划);5)层序遍历(迭代/递归);6)有序数组转二叉搜索树。涵盖了深度优先、广度优先遍历及递归、迭代等多种解法。

2025-12-23 12:13:18 106

原创 [C++——lesson36.数据结构进阶——「哈希的应用(布隆过滤器)」]

本文介绍了布隆过滤器的原理、实现和应用。布隆过滤器是一种概率型数据结构,通过多个哈希函数映射位图来高效判断元素是否存在。文章详细讲解了布隆过滤器的实现过程,包括基本结构、插入、查找操作,并分析了其优缺点。针对误判率问题,提出了增加哈希函数个数和扩大位图空间的优化方案。最后通过海量数据处理面试题,展示了哈希切割的实际应用场景。布隆过滤器在注册验证、减少IO请求等场景中具有独特优势,是哈希思想的重要应用。

2025-12-23 11:14:30 904

原创 [C++——lesson38.——「C++11『右值引用 ‖ 完美转发 ‖ 新增类功能 ‖ 可变参数模板』」]

C++11右值引用与移动语义解析 C++11引入的右值引用(&&)通过移动语义显著提升了资源管理效率。右值引用允许直接转移临时对象(右值)资源,避免不必要的深拷贝。关键应用包括: 移动构造/赋值:通过swap转移资源,减少拷贝开销。 完美转发:使用std::forward保持参数右值属性,确保链式调用中移动语义生效。 类功能升级:新增default/delete关键字控制默认函数生成,支持委托构造和成员变量初始化。 可变参数模板:Args...实现任意参数传递,结合递归或逗号表达式解析参数包

2025-12-22 11:11:42 906

原创 [C++——lesson37.——「C++11『基础新特性』」]

本文介绍了C++11标准的重要更新内容。C++11是自1998年以来最具突破性的版本,带来了140多项新特性和600多个缺陷修复,使C++语言更加现代化。主要内容包括:1.列表初始化{}的全面升级,支持内置类型和自定义类型初始化;2.简化声明的新特性如auto自动类型推导和decltype类型获取;3.范围for循环语法糖;4.智能指针(unique_ptr/shared_ptr)实现自动资源管理;5.STL容器新增array/forward_list等,并改进接口。这些特性使C++编程更高效简洁,为后续右

2025-12-21 20:49:10 719

原创 [C++——lesson35.数据结构进阶——「哈希的应用(位图)」]

本文介绍了位图(bitset)这一特殊数据结构及其应用。位图通过0/1比特位表示数据存在与否,具有极高的空间利用率和O(1)的查找速度。文章首先以腾讯面试题(40亿无符号整数查找)为例,对比常规方法的不足,展示位图的优势。随后详细讲解了位图的模拟实现,包括set、reset和test等核心操作。通过多个海量数据处理问题(如查找只出现一次的数、文件交集等),进一步演示了位图的灵活应用。位图特别适合处理整型数据的快速查找和统计问题,但无法直接处理非整型数据。文中还提到了位图与布隆过滤器的关联,为后续内容埋下伏笔

2025-12-21 12:20:50 837

原创 [hot100 NO.31~36]

本文介绍了链表和二叉树相关算法题的解题思路。链表部分包括K个一组翻转链表(通过头插法实现)、随机链表复制(哈希表或拼接拆分法)、排序链表(归并排序)等。二叉树部分重点讲解中序遍历的递归和迭代实现。此外还涉及LRU缓存的两种实现方式,分析其核心成员变量的作用机制。这些算法涵盖了链表操作、分治思想、哈希映射等典型解题技巧,通过代码示例和步骤分解展示了关键操作的具体实现过程。

2025-12-20 21:18:33 884 1

原创 [C++——lesson34.数据结构进阶——「哈希表的完善及封装」]

本文详细介绍了哈希表的完善与封装过程。首先对哈希表进行了深拷贝优化,新增了迭代器功能,并优化了哈希函数和素数扩容策略。随后通过模板特化和仿函数设计,实现了用同一哈希表同时封装unordered_set和unordered_map。文章解决了键值冲突、迭代器非法操作等问题,并新增了operator[]等功能。性能测试显示封装后的哈希表效率优异。最后提供了完整的源码实现,展示了如何将基础数据结构封装为实用的STL容器。

2025-12-20 17:31:06 834

原创 [C++——lesson33.数据结构进阶——「哈希表的模拟实现」]

本文介绍了哈希表的两种实现方式:闭散列和开散列(哈希桶)。闭散列通过线性探测解决哈希冲突,但存在踩踏问题;开散列则采用链表结构,避免了踩踏现象。文章详细讲解了两种方案的存储结构定义、查找、插入、删除等核心操作,并比较了传统写法和现代写法在扩容处理上的差异。测试结果表明,开散列在百万级数据下仍能保持高效查找性能,最大桶长度仅为2。最后指出标准库中的unordered_set/map正是基于哈希桶实现的,为后续封装工作奠定基础。

2025-12-19 20:08:12 1027

原创 [hot100 NO.25~30]

本文介绍了链表常见问题的解法:1. 环形链表检测(哈希表法O(n)空间/快慢指针法O(1)空间)及数学证明;2. 合并有序链表的双指针和递归解法;3. 逆序链表数字相加的迭代实现;4. 删除倒数第N个节点的哨兵+双指针技巧;5. 两两交换节点的迭代和递归方法。重点分析了快慢指针判断环及找环入口的数学原理,展示了链表问题中空间优化和递归分解问题的典型解法。

2025-12-18 22:29:07 252

原创 [C++——lesson32.数据结构进阶——「初识哈希」]

本文介绍了C++中的哈希概念及其应用。主要内容包括:哈希思想通过哈希函数建立键值与存储位置的映射关系;常见哈希函数如直接定址法和除留余数法;哈希冲突的解决方法(开放定址法和链地址法);C++11新增的unordered_set/unordered_map容器及其与set/map的区别。性能测试表明,在随机数据场景下哈希表的查找效率显著优于红黑树。文章还提供了哈希表的代码实现,并总结了unordered_set和unordered_map的核心区别:前者是去重集合,后者是键值对字典。哈希表以其O(1)的平均时

2025-12-18 11:19:10 1446

原创 [C++——lesson31.数据结构进阶——「红黑树封装 set 和 map」]

本文详细介绍了如何通过完善红黑树来实现set和map的封装。主要内容包括: 红黑树的完善:修改默认成员函数实现深拷贝,新增迭代器功能,设计反向迭代器适配器。 封装实现:解决set和map参数冲突问题,使用仿函数获取不同类型key值,处理set迭代器的非法修改问题,调整函数返回值。 性能测试:对比自实现set与标准库set的性能表现,验证红黑树的稳定性。 完整代码:提供了完善的RBTree实现,以及基于RBTree的set和map封装。 通过泛型编程思想,成功用同一棵红黑树实现了set和map两种容器,体现了

2025-12-17 21:55:22 863

原创 [C++——lesson30.数据结构进阶——「红黑树」]

本文介绍了红黑树这一重要的自平衡二叉搜索树数据结构。主要内容包括:红黑树的定义与核心性质(节点非红即黑、根节点为黑、无连续红节点、路径黑节点数相同);插入操作的三种调整策略(单纯染色、单旋+染色、双旋+染色);与AVL树的性能对比(红黑树插入删除更高效,查找性能相近);以及红黑树的合法性检验方法。文章通过代码示例和图示详细解析了红黑树的实现原理,强调其在工程实践中的优势:通过近似平衡减少旋转开销,在保证O(logn)操作复杂度的同时,特别适合需要频繁更新的场景。红黑树是STL中set/map等容器的底层实现

2025-12-17 09:40:11 958

原创 [hot100 NO.19~24]

本文摘要: 螺旋矩阵:通过维护四个边界(上、下、左、右),按"右→下→左→上"的顺序逐层遍历矩阵,每遍历完一条边就收缩对应边界,时间复杂度O(mn)。 旋转图像:分块原地旋转,将矩阵按"层"划分,通过临时变量完成4个元素的循环交换实现顺时针90度旋转,时间复杂度O(n²),空间复杂度O(1)。 搜索二维矩阵II:利用矩阵的行列递增特性,从矩阵左下角开始搜索,通过比较-移动方式缩小范围,时间复杂度O(m+n)。 相交链表:双指针遍历两个链表,遍历完自身后切换到对方链表头

2025-12-16 10:38:10 728

原创 [C++——lesson29.数据结构进阶——「AVL树」]

本文介绍了AVL树的基本概念和实现原理。AVL树是一种高度平衡的二叉搜索树,通过平衡因子和旋转操作来维持树的平衡,避免退化为单支树。文章详细讲解了AVL树的节点定义、插入操作以及四种旋转方式(左单旋、右单旋、右左双旋、左右双旋),并提供了旋转操作的代码实现和抽象图演示。此外,还介绍了AVL树的合法性检验方法和性能特点,指出其在查询性能上的优势及结构修改时的性能局限。AVL树适合存储静态数据,而红黑树则在动态数据场景中表现更优。文章配有详细的代码示例和调试技巧,帮助读者深入理解AVL树的实现。

2025-12-16 09:50:56 1058

原创 [C++——lesson28.数据结构进阶——「set 和 map 学习及使用」]

本文介绍了STL中的关联式容器set和map。set是基于二叉搜索树的键值模型,具有快速查找、去重和排序特性;map是键值对模型,支持高效查找和修改实值。两者底层均为红黑树实现,支持迭代器遍历。文章详细讲解了容器的构造、插入、删除等操作,重点分析了map的operator[]功能及其实现原理。同时介绍了允许键值冗余的multiset和multimap,并通过统计单词频率、复制复杂链表等案例展示了实际应用。最后补充了利用set求交集和差集的方法。这些容器在数据处理中能显著提升效率。

2025-12-15 23:18:47 889

原创 [C++——lesson27.数据结构进阶——「二叉搜索树」]

本文系统介绍了二叉搜索树(BST)的概念、实现和应用。主要内容包括:二叉搜索树定义为一棵左子树节点值均小于根节点,右子树节点值均大于根节点的二叉树,具有快速查找特性(理想时间复杂度O(logn))。文章详细讲解了BST的基本操作实现:查找(比较目标值与当前节点值决定搜索方向)、插入(找到合适位置后创建新节点)、删除(处理无子树、单子树和双子树三种情况)。特别介绍了递归实现方式,利用引用简化链接操作。此外还介绍了BST的遍历方式(前序、中序、后序)及其实现,中序遍历结果即为升序序列。文章最后讨论了BST的两种

2025-12-15 18:02:24 822

原创 [C++——lesson26.「多态」]

本文深入解析了C++多态的核心概念与实现机制。主要内容包括: 多态的基本概念与实现条件(虚函数重写、父类指针/引用调用) 虚函数表(vft)与虚表指针(vfptr)的底层原理 抽象类与纯虚函数的特性 单继承与多继承中的虚表差异 动态绑定与静态绑定的区别 多态相关面试题解析 文章通过代码示例详细演示了多态的实现过程,揭示了虚函数调用机制,并对比了重载、重写和重定义的区别。核心价值在于理解"接口抽象"与"动态绑定"的逻辑,掌握多态在代码解耦、扩展性和统一管理方面的优势。

2025-12-14 09:45:26 727

原创 [hot100 NO.13~18]

本文摘要: 本文系统解析了5个经典数组算法问题: 最大子数组和(13):采用动态规划,定义dp[i]为以nums[i]结尾的最大子数组和,通过状态转移方程dp[i]=max(nums[i],dp[i-1]+nums[i])求解,时间复杂度O(n)。 合并区间(14):通过排序+贪心策略,按左端点排序后遍历合并重叠区间,时间复杂度O(nlogn)。 轮转数组(15):使用三次反转法,先整体反转,再反转前k个和后n-k个元素,实现O(n)时间、O(1)空间的右轮转。 除自身乘积(16):利用前缀积和后缀积数组,

2025-12-13 23:02:02 792

原创 [C++——lesson25.「继承」]

本文系统讲解了C++继承机制的核心概念与应用。继承作为面向对象三大特性之一,实现了代码复用,允许子类在保留父类特性的基础上进行功能扩展。文章详细阐述了继承的定义方式、访问权限控制(public/protected/private)、作用域规则及隐藏现象,并通过教务系统等实例说明继承的实际价值。特别分析了多继承带来的菱形继承问题及其解决方案——虚继承技术,揭示了虚基表的工作原理。最后对比了继承与组合的优劣,指出继承为多态实现奠定基础,但在实际开发中应合理选择代码复用方式。全文兼顾理论与实战,帮助读者全面掌握C

2025-12-13 18:08:14 662

原创 [C++——lesson24.「模板进阶」]

本文介绍了C++模板编程的核心概念和高级用法。主要内容包括:1)非类型模板参数的使用方法和类型限制,以array容器为例说明其应用;2)模板特化的两种形式(全特化和偏特化)及其实际应用场景,如解决指针比较问题;3)模板分离编译问题的原因分析和两种解决方案。文章还总结了模板的优缺点,指出其提高了代码复用性和灵活性,但也可能带来代码膨胀和编译时间增加的问题。通过具体代码示例,展示了模板在泛型编程中的强大功能和实际应用价值。

2025-12-13 09:00:00 710 1

原创 [C++——lesson22.STL 学习——「优先级队列」]

本文介绍了C++ STL中的优先级队列(priority_queue)的实现原理和使用方法。优先级队列本质上是堆数据结构,底层使用数组存储的完全二叉树实现。文章首先讲解了优先级队列的基本功能,包括构造方式、元素操作和优先级模式切换。然后详细阐述了如何模拟实现优先级队列,重点介绍了向上调整和向下调整算法。文章还探讨了仿函数(function objects)的应用,通过仿函数可以灵活控制堆的大小比较逻辑。最后针对自定义类型(如日期类指针)的特殊场景,提出了解决方案。优先级队列在Top-K问题等场景中具有明显优

2025-12-12 17:00:00 1437

原创 [动态规划问题详解]

动态规划是一种高效算法设计方法,通过分解问题为重叠子问题并存储子问题解来避免重复计算。其核心思想包括最优子结构、重叠子问题和无后效性。解题遵循五个步骤:定义状态、确定转移方程、初始化边界、确定遍历顺序和计算结果。典型应用包括斐波那契数列、最大子数组和、不同路径和背包问题。优化技巧包括空间压缩、状态合并等。学习建议从基础模型入手,逐步进阶,注重手动推导和对比分析。动态规划的关键在于准确的状态定义和高效的状态转移。

2025-12-12 11:31:03 1048

原创 [C++——lesson21.STL 学习——「反向迭代器」]

本文介绍了C++ STL中的反向迭代器适配器设计原理与实现。通过模板类__reverse_iterator封装正向迭代器,实现了反向遍历功能。关键设计包括:1)正向/反向操作符重载的对称转换;2)多参数模板支持const/非const迭代器;3)特殊设计的operator*()实现位置对称。文章详细演示了如何将反向迭代器适配到vector和list容器中,包括rbegin()/rend()接口实现及自定义类型访问。最后提供了完整代码示例,展示了反向迭代器在STL容器中的通用适配能力,为理解迭代器设计模式提供

2025-12-12 08:30:00 744

原创 [hot100 NO.8~12]

本文介绍了四种经典的滑动窗口算法及其应用: 无重复字符的最长子串:使用双指针滑动窗口和哈希表记录字符出现次数,时间复杂度O(n)。 字母异位词查找:固定长度滑动窗口结合字符计数哈希,通过count变量统计有效字符数,时间复杂度O(n+m)。 和为K的子数组:利用前缀和与哈希表优化,将暴力解法的O(n²)优化至O(n)。 滑动窗口最大值:使用单调队列维护候选最大值,保证线性时间复杂度O(n)。 每种算法都通过滑动窗口技术实现了从暴力解法到最优解的优化,适用于不同场景的子串/子数组问题,具有线性时间复杂度和常数

2025-12-11 22:56:39 1023

原创 [hot100 NO.1~7]

本文摘要:文章解析了7个经典算法问题的优化解法,涵盖哈希表、双指针等核心技巧。哈希表应用包括两数之和(O(n)时间)、字母异位词分组(排序特征值)和最长连续序列(去重+起点统计)。双指针专题涉及移动零(快慢指针)、盛水容器(贪心策略)、三数之和(排序+剪枝)和接雨水(短板效应)。每个问题都详细拆解了核心思路、关键步骤和复杂度分析,突出最优解法的设计逻辑,如空间换时间、去重优化和边界处理。通过具体示例演示算法执行过程,帮助深入理解如何将基础数据结构应用于实际问题求解。

2025-12-11 11:03:16 757

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除