C++
文章平均质量分 89
κzу
不定期更新博客 记录学习和生活
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
极差不超过定值的最长子数组—滑动窗口+deque线性优化
本文探讨了如何寻找最长连续子数组,使得其任意两元素绝对差不超过给定限制值limit。通过将问题转化为维护滑动窗口内的极差,提出了基于双端队列(deque)的高效算法。算法使用两个单调队列分别动态维护窗口的最大值和最小值,确保极差始终≤limit。左指针在窗口不合法时移动,右指针逐步扩展窗口,时间复杂度为O(n)。该解法是滑动窗口与单调队列结合的经典应用,适用于各类动态数据统计问题。原创 2026-07-25 16:16:06 · 225 阅读 · 0 评论 -
基于Cache替换算法的LRU缓存实现
LRU(最近最少使用)是一种缓存替换算法,通过淘汰最久未使用的数据来管理有限缓存空间。本文介绍了LRU缓存的实现方法:结合双向链表和哈希表,前者维护数据访问顺序(最近访问移至头部),后者提供O(1)的快速查找。具体实现中,get操作通过哈希表定位数据并调整链表位置;put操作更新或新增数据,若缓存满则删除尾部最久未用数据。这种结构完美平衡了快速访问和时序维护的需求,时间复杂度均为O(1),被广泛应用于多级存储系统中。原创 2026-07-18 15:32:00 · 252 阅读 · 0 评论 -
快速选择算法求解TopK:基于快排的思维跃迁
本文介绍了快速选择算法用于高效求解数组中第k大元素的问题。该算法基于快速排序思想,通过选择基准值将数组分区,仅递归处理包含目标的那一侧,将时间复杂度优化至O(n)。文章详细阐述了算法原理、图解过程和代码实现,重点说明了升序分区策略和递归终止条件,并指出该算法在数据量大时相比排序和堆方法更具优势,适用于数据库、机器学习等大规模数据处理场景。原创 2026-07-11 16:34:42 · 372 阅读 · 0 评论 -
全排列—回溯剪枝的决策树艺术
本文介绍了解决包含重复数字的全排列问题的回溯剪枝算法。核心思路是:1) 先排序数组使相同元素相邻;2) 通过回溯构建决策树生成所有排列;3) 关键剪枝策略要求相同元素必须按数组原始顺序选取以避免重复排列。文章详细解析了算法实现,包括排序预处理、回溯搜索过程以及visited数组标记已用元素的剪枝条件。该方法通过固定重复元素的选取顺序实现高效去重,掌握这一排序+回溯+剪枝的方法论可推广解决各类排列组合问题。原创 2026-07-05 18:24:06 · 433 阅读 · 0 评论 -
二维前缀DP求解矩阵区域和
本文介绍了利用二维前缀和求解矩阵区域和问题的方法。给定m×n矩阵mat和整数k,需要为每个位置(i,j)计算以它为中心、边长为2k+1的正方形区域元素和(边界超出时截断)。解法核心是构建前缀和矩阵dp,其中dp[i][j]表示从(0,0)到(i-1,j-1)的矩形和,通过容斥原理递推计算:dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + mat[i-1][j-1]。查询时再次应用容斥原理,用四个前缀和O(1)求出目标区域和。原创 2026-06-27 17:09:34 · 263 阅读 · 0 评论 -
最长重复子串:哈希+二分优化算法
本文介绍了求解字符串中最长重复子串的两种方法。暴力枚举法通过双重循环检查所有子串,时间复杂度为O(n^3),效率较低。优化方法采用哈希+二分策略:利用重复子串长度的单调性进行二分查找,每次检查时用哈希集合存储指定长度的所有子串,若发现重复即返回。该方法将时间复杂度优化至O(NlogN),是处理此类字符串问题的有效方案。文章详细说明了两种方法的实现步骤和复杂度分析,突出了哈希+二分算法在效率上的显著优势。原创 2026-06-21 15:47:15 · 181 阅读 · 0 评论 -
深入剖析B树系列—MySQL索引背后的外查找大师
本文系统介绍了B树及其变种B+、B*树、B树的原理与实现。B树是一种多路平衡搜索树,通过降低树高减少磁盘I/O次数,适用于海量数据存储场景。文章详细解析了B树的节点结构、查找算法和插入操作,重点阐述了插入时的分裂机制。B+树在B树基础上优化,将数据集中在叶子节点并形成链表,提升范围查询效率;B树通过提高节点填充率进一步优化空间利用率。最后探讨了B树系列在MySQL索引中的应用,对比了MyISAM和InnoDB存储引擎的索引实现差异。原创 2026-06-14 13:36:43 · 338 阅读 · 0 评论 -
图的高阶算法:从构造最小生成树到求解最短路径问题
本文系统介绍了图论中的两类核心算法:最小生成树和最短路径算法。最小生成树部分详细解析了Kruskal算法(基于全局贪心策略,使用并查集检测环路)和Prim算法(基于局部贪心策略,逐步扩展生成树)的实现原理和代码实现。最短路径部分深入剖析了三种典型算法:Dijkstra算法(处理非负权图的单源最短路径)、Bellman-Ford算法(支持负权边检测的单源最短路径)以及Floyd-Warshall算法(动态规划解决多源最短路径问题),分别阐述了它们的适用场景、核心思想和具体实现。原创 2026-06-06 16:33:40 · 248 阅读 · 0 评论 -
C++11进阶—在拥挤和变化的世界中茁壮成长
本文详细介绍了C++11标准引入的核心新特性,包括可变参数模板、emplace系列接口、lambda表达式、包装器function、bind适配器、异常处理机制和智能指针等。通过具体代码示例展示了这些特性的使用方法,并深入分析了其底层实现原理。特别强调了智能指针(unique_ptr、shared_ptr、weak_ptr)在资源管理方面的优势,以及如何解决循环引用问题。文章还探讨了C++11异常处理机制的改进和线程安全问题。这些新特性使C++成为更安全、更现代的编程语言,显著提升了代码的健壮性和可维护性。原创 2026-01-30 20:27:29 · 640 阅读 · 0 评论 -
C++11新特性:现代C++的文艺复兴
本文介绍了C++11引入的几个重要新特性:1)列表初始化实现了统一初始化方式,支持所有对象用{}初始化;2)右值引用通过区分左值和右值,支持移动语义,减少了不必要的拷贝;3)移动语义通过移动构造和移动赋值提高了资源利用效率;4)引用折叠规则解决了模板参数推导中的引用问题;5)完美转发保持了参数传递时的值类别不变。这些特性共同推动了C++向现代编程语言的转变,提高了代码效率和表达能力,为后续C++发展奠定了基础。原创 2026-01-14 20:44:50 · 697 阅读 · 0 评论 -
哈希实现&封装unordered系列容器
本文介绍了基于哈希桶实现的unordered_set和unordered_map容器。哈希桶通过链表处理冲突,使用素数扩容策略减少冲突。详细阐述了哈希桶的构造、析构、迭代器实现及find/insert/erase等核心操作。unordered_set和unordered_map通过封装哈希桶实现,其中unordered_map额外实现了operator[]操作。相比红黑树实现的set/map,哈希实现的容器具有O(1)的平均时间复杂度,在查找效率上更具优势。原创 2026-01-01 22:09:36 · 1112 阅读 · 0 评论 -
红黑树实现—规则&约束的平衡之道
本文系统介绍了红黑树的结构特性与实现方法。红黑树作为平衡二叉搜索树,通过颜色约束规则(根节点为黑、无连续红节点、路径黑节点数相同)实现近似平衡,其查找效率为O(logN)。重点阐述了红黑树的插入操作,详细分析了三种处理情况:单纯变色、单旋+变色和双旋+变色。文章还提供了结点结构定义、查找、结点数统计、高度计算、中序遍历以及平衡性检查等核心功能的实现代码,并通过测试用例验证了实现的正确性。相比AVL树,红黑树以稍宽松的平衡条件换取更少的旋转操作,在实践中应用更为广泛。原创 2025-12-20 21:49:50 · 690 阅读 · 0 评论 -
AVL树结构实现—高效算法的“平衡大师“
本文系统介绍了AVL树的结构特性与实现原理。AVL树作为平衡二叉搜索树,通过控制左右子树高度差不超过1来保持平衡,其查找、插入时间复杂度均为O(logN)。文章详细解析了AVL树的结点结构、查找、中序遍历等基础操作,重点阐述了插入操作的平衡因子更新规则和四种旋转调整策略(左单旋、右单旋、左右双旋、右左双旋)。通过代码实现和性能测试验证了AVL树的高效性,10万数据插入仅需0.1秒,查找仅79毫秒,树高保持在19层,充分展现了AVL树动态平衡的优势。原创 2025-12-08 22:09:31 · 963 阅读 · 0 评论 -
关联式容器set、map—底层结构&实战应用
本文介绍了STL中的关联式容器set和map。set是基于红黑树实现的key搜索容器,支持去重和自动排序,常用接口包括insert、erase、find等;map是key-value结构的红黑树实现,支持operator[]访问和修改。文章详细讲解了set/map的定义、常用接口和使用方法,并分析了multiset/multimap的区别。最后通过四个实际应用案例(求数组交集、链表环入口点、随机链表复制和前K高频单词)展示了这些容器的强大功能。原创 2025-12-04 18:59:28 · 924 阅读 · 0 评论 -
二叉搜索树算法实现—查找&映射的思想艺术
本文详细介绍了二叉搜索树(BST)的结构与实现。二叉搜索树是一种基于二叉树的数据结构,其左子树所有节点值小于根节点,右子树所有节点值大于根节点。文章首先阐述了BST的定义和性质,然后重点讲解了查找、插入、删除等核心操作的实现方法,包括处理删除时的四种不同情况。同时介绍了key-value场景下的BST实现及其应用,如简易字典和统计词频。文章还分析了BST的性能特点,指出其在最坏情况下会退化为链表,时间复杂度为O(N)。最后指出BST是AVL树、红黑树等更高级平衡树结构的基础。原创 2025-11-29 15:39:07 · 848 阅读 · 0 评论 -
继承&多态—C++面向对象的“瑞士军刀”
本文将围绕继承、多态两大特性展开介绍,继承、多态可认为是在封装的基础上进一步扩展,进一步实现了代码复用。在继承中,子类将继承父类,父类的成员变量和函数在子类中都各有一份,子类在父类的基础上进一步扩展成员和功能,实现了父类的复用,多态与模板类似,都能实现复用,不同在于模板是通过传不同参数类型,在编译时生成对应的函数,是静态的,而多态则是同一个函数通过传不同的对象,在运行时实现相应的功能,是动态的。在面向对象编程中,继承、多态可谓是面向对象的"瑞士军刀",在面向对象编程中有着广泛的应用。原创 2025-11-25 12:21:47 · 673 阅读 · 0 评论 -
STL设计模式探秘:容器适配器&仿函数
本文探讨了STL中容器适配器与仿函数的实现原理及应用。容器适配器(stack、queue、priority_queue)通过封装现有容器(vector、list、deque)实现特定结构,其中deque因其高效的两端操作成为默认适配容器。仿函数通过重载operator()实现函数式调用,为排序等操作提供灵活性。重点分析了:1) 容器适配器的实现机制,包括stack基于vector、queue基于list的适配方法;2) deque的中控指针数组结构及其迭代器实现;3) priority_queue的堆算法。原创 2025-11-15 21:41:42 · 1353 阅读 · 0 评论 -
从基本用法到迭代器实现—list重难点突破
本文介绍了C++ STL中list容器的实现原理及核心接口。list基于带头双向循环链表实现,其迭代器通过封装结点指针并重载操作符实现,支持增删改查等操作。重点分析了list的特有接口如sort、merge、splice等,详细讲解了迭代器模板的实现原理,包括operator*和operator->的重载。通过对比vector,指出list插入不会导致迭代器失效但删除会失效的特点。最后展示了如何实现list的核心功能,包括构造、析构、拷贝等,体现了通过模板化设计减少代码重复的思想。原创 2025-11-11 21:04:07 · 796 阅读 · 0 评论 -
C++ STL::vector底层剖析
本文介绍了C++ STL中的vector容器,重点分析了其常用接口及实现原理。vector基于动态顺序表实现,具有自动内存管理、灵活改变空间大小的特点。文章详细讲解了构造、迭代器、reserve、resize等核心接口的使用方法,并实现了vector的二重嵌套结构(如二维数组和杨辉三角)。在实现层面,通过三个指针成员变量管理存储空间,剖析了push_back、insert、erase等关键操作的底层逻辑,特别强调了insert和erase操作可能导致的迭代器失效问题。最后总结了vector相比其他容器的优势原创 2025-11-05 21:21:56 · 719 阅读 · 0 评论 -
C++ string相关接口&模拟实现
本文详细介绍了C++中string类的用法及其模拟实现。string作为基础类封装了字符串操作,是学习面向对象编程的重要切入点。文章首先讲解了string的构造、访问、容量管理等基础用法,通过代码示例展示了迭代器、范围for等高级特性。随后重点阐述了string的模拟实现过程,包括构造函数、拷贝控制、运算符重载等核心功能,并提供了完整的测试验证。实现过程中特别强调了深拷贝的重要性,避免浅拷贝导致的内存问题。最后指出string是C++标准库的重要组成部分。原创 2025-10-27 21:04:42 · 1095 阅读 · 0 评论 -
C++内存管理&模板深度剖析
本文深入探讨了C++的内存管理机制和模板编程两大核心特性。在内存管理方面,文章详细介绍了C++内存区域的划分(栈、堆、静态区等)以及new/delete操作符的使用,特别是对自定义类型的内存管理机制进行了剖析。在模板编程方面,重点阐述了函数模板和类模板的概念、实现原理及使用方法,包括模板的实例化过程(隐式和显式)。文章通过丰富实例展示了模板如何解决代码复用问题,并对比了C++与C在内存管理和代码复用方面的差异与优势。最后强调理解内存管理和模板编程是掌握C++高效开发的关键所在。原创 2025-10-14 18:39:59 · 789 阅读 · 0 评论 -
再探类&对象——C++入门进阶
本文深入探讨了C++类和对象的进阶内容,主要包括五个核心知识点:初始化列表的使用规则和注意事项;static成员变量的特性及其共享特性;友元函数和友元类如何突破封装限制;内部类的定义及其与外部类的关系;匿名对象的特性和适用场景。文章通过代码示例详细演示了这些特性的实际应用,并强调了面向对象编程的设计思维,指出理解和掌握这些概念对后续学习C++面向对象编程和STL具有重要意义。原创 2025-10-06 12:54:24 · 1135 阅读 · 0 评论 -
C++类&对象&运算符重载综合应用——日期类项目的实现
本文介绍了一个C++日期类项目的实现过程,该项目综合应用了类、对象和运算符重载三大核心概念。项目通过Date.h、Date.cpp和Test.cpp三个文件实现日期类,包含年月日成员变量和丰富的成员函数,如日期校验、获取月份天数等。重点实现了各种运算符重载,包括算术运算符(+、-、++、--)、关系运算符(>、<、==等)和流运算符(<<、>>),并对每个功能进行了详细测试验证。该项目展示了C++面向对象编程的特性,通过运算符重载使日期操作更加直观。原创 2025-10-03 11:30:08 · 1316 阅读 · 0 评论 -
类&对象——C++入门基础
本文介绍了C++中类与对象的核心概念。类作为C语言结构体的扩展,通过class关键字定义,支持成员变量和成员函数,并具有public、private、protected三种访问权限。重点讲解了this指针的隐式传递机制、类的内存对齐规则(与C结构体一致但不包含成员函数),以及6个默认成员函数中的构造函数(用于初始化)和析构函数(用于资源清理)。文章还详细说明了运算符重载的实现方式,包括成员函数形式下this指针的隐式传递特性。最后强调类与对象是面向对象编程的基础,为后续学习封装、继承和多态奠定重要基础。原创 2025-09-26 17:44:56 · 929 阅读 · 0 评论 -
C++相关概念与语法基础——C基础上的改进与优化
本文对比分析了C与C++的语法特性。C语言贴近底层但存在变量/函数命名冲突、多级指针复杂等问题。C++在此基础上引入命名空间、函数重载、引用等机制,解决了命名冲突问题,简化了指针操作。文章详细介绍了C++的域概念、输入输出流、缺省参数、内联函数和类等核心语法,指出C++通过优化C语言不足提高了开发效率。C++语法更复杂但功能更强大,为后续深入学习软件开发奠定了基础。原创 2025-09-23 19:40:14 · 1506 阅读 · 0 评论
分享