算法
文章平均质量分 83
κzу
不定期更新博客 记录学习和生活
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
极差不超过定值的最长子数组—滑动窗口+deque线性优化
本文探讨了如何寻找最长连续子数组,使得其任意两元素绝对差不超过给定限制值limit。通过将问题转化为维护滑动窗口内的极差,提出了基于双端队列(deque)的高效算法。算法使用两个单调队列分别动态维护窗口的最大值和最小值,确保极差始终≤limit。左指针在窗口不合法时移动,右指针逐步扩展窗口,时间复杂度为O(n)。该解法是滑动窗口与单调队列结合的经典应用,适用于各类动态数据统计问题。原创 2026-07-25 16:16:06 · 248 阅读 · 0 评论 -
基于Cache替换算法的LRU缓存实现
LRU(最近最少使用)是一种缓存替换算法,通过淘汰最久未使用的数据来管理有限缓存空间。本文介绍了LRU缓存的实现方法:结合双向链表和哈希表,前者维护数据访问顺序(最近访问移至头部),后者提供O(1)的快速查找。具体实现中,get操作通过哈希表定位数据并调整链表位置;put操作更新或新增数据,若缓存满则删除尾部最久未用数据。这种结构完美平衡了快速访问和时序维护的需求,时间复杂度均为O(1),被广泛应用于多级存储系统中。原创 2026-07-18 15:32:00 · 266 阅读 · 0 评论 -
快速选择算法求解TopK:基于快排的思维跃迁
本文介绍了快速选择算法用于高效求解数组中第k大元素的问题。该算法基于快速排序思想,通过选择基准值将数组分区,仅递归处理包含目标的那一侧,将时间复杂度优化至O(n)。文章详细阐述了算法原理、图解过程和代码实现,重点说明了升序分区策略和递归终止条件,并指出该算法在数据量大时相比排序和堆方法更具优势,适用于数据库、机器学习等大规模数据处理场景。原创 2026-07-11 16:34:42 · 408 阅读 · 0 评论 -
全排列—回溯剪枝的决策树艺术
本文介绍了解决包含重复数字的全排列问题的回溯剪枝算法。核心思路是:1) 先排序数组使相同元素相邻;2) 通过回溯构建决策树生成所有排列;3) 关键剪枝策略要求相同元素必须按数组原始顺序选取以避免重复排列。文章详细解析了算法实现,包括排序预处理、回溯搜索过程以及visited数组标记已用元素的剪枝条件。该方法通过固定重复元素的选取顺序实现高效去重,掌握这一排序+回溯+剪枝的方法论可推广解决各类排列组合问题。原创 2026-07-05 18:24:06 · 451 阅读 · 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 · 280 阅读 · 0 评论 -
最长重复子串:哈希+二分优化算法
本文介绍了求解字符串中最长重复子串的两种方法。暴力枚举法通过双重循环检查所有子串,时间复杂度为O(n^3),效率较低。优化方法采用哈希+二分策略:利用重复子串长度的单调性进行二分查找,每次检查时用哈希集合存储指定长度的所有子串,若发现重复即返回。该方法将时间复杂度优化至O(NlogN),是处理此类字符串问题的有效方案。文章详细说明了两种方法的实现步骤和复杂度分析,突出了哈希+二分算法在效率上的显著优势。原创 2026-06-21 15:47:15 · 207 阅读 · 0 评论 -
图的高阶算法:从构造最小生成树到求解最短路径问题
本文系统介绍了图论中的两类核心算法:最小生成树和最短路径算法。最小生成树部分详细解析了Kruskal算法(基于全局贪心策略,使用并查集检测环路)和Prim算法(基于局部贪心策略,逐步扩展生成树)的实现原理和代码实现。最短路径部分深入剖析了三种典型算法:Dijkstra算法(处理非负权图的单源最短路径)、Bellman-Ford算法(支持负权边检测的单源最短路径)以及Floyd-Warshall算法(动态规划解决多源最短路径问题),分别阐述了它们的适用场景、核心思想和具体实现。原创 2026-06-06 16:33:40 · 267 阅读 · 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 · 1130 阅读 · 0 评论 -
红黑树实现—规则&约束的平衡之道
本文系统介绍了红黑树的结构特性与实现方法。红黑树作为平衡二叉搜索树,通过颜色约束规则(根节点为黑、无连续红节点、路径黑节点数相同)实现近似平衡,其查找效率为O(logN)。重点阐述了红黑树的插入操作,详细分析了三种处理情况:单纯变色、单旋+变色和双旋+变色。文章还提供了结点结构定义、查找、结点数统计、高度计算、中序遍历以及平衡性检查等核心功能的实现代码,并通过测试用例验证了实现的正确性。相比AVL树,红黑树以稍宽松的平衡条件换取更少的旋转操作,在实践中应用更为广泛。原创 2025-12-20 21:49:50 · 703 阅读 · 0 评论 -
AVL树结构实现—高效算法的“平衡大师“
本文系统介绍了AVL树的结构特性与实现原理。AVL树作为平衡二叉搜索树,通过控制左右子树高度差不超过1来保持平衡,其查找、插入时间复杂度均为O(logN)。文章详细解析了AVL树的结点结构、查找、中序遍历等基础操作,重点阐述了插入操作的平衡因子更新规则和四种旋转调整策略(左单旋、右单旋、左右双旋、右左双旋)。通过代码实现和性能测试验证了AVL树的高效性,10万数据插入仅需0.1秒,查找仅79毫秒,树高保持在19层,充分展现了AVL树动态平衡的优势。原创 2025-12-08 22:09:31 · 975 阅读 · 0 评论 -
二叉搜索树算法实现—查找&映射的思想艺术
本文详细介绍了二叉搜索树(BST)的结构与实现。二叉搜索树是一种基于二叉树的数据结构,其左子树所有节点值小于根节点,右子树所有节点值大于根节点。文章首先阐述了BST的定义和性质,然后重点讲解了查找、插入、删除等核心操作的实现方法,包括处理删除时的四种不同情况。同时介绍了key-value场景下的BST实现及其应用,如简易字典和统计词频。文章还分析了BST的性能特点,指出其在最坏情况下会退化为链表,时间复杂度为O(N)。最后指出BST是AVL树、红黑树等更高级平衡树结构的基础。原创 2025-11-29 15:39:07 · 857 阅读 · 0 评论 -
数据结构七大排序算法模拟实现&性能分析
本文系统介绍了数据结构中的七大经典排序算法:冒泡排序、选择排序、堆排序、插入排序、希尔排序、快速排序和归并排序。重点分析了各算法的核心思想、实现逻辑及时间复杂度:冒泡和选择排序时间复杂度为O(N²),适合教学;堆排序和快速排序采用分治思想,时间复杂度为O(NlogN);希尔排序作为插入排序的优化版本,时间复杂度为O(N^1.3)。文章通过代码实现展示了各算法的优化策略(如快速排序的三数取中、小区间优化),并比较了它们的稳定性与适用场景。原创 2025-09-17 19:19:58 · 867 阅读 · 0 评论 -
二叉树遍历方式&树的递归算法剖析
本文系统介绍了二叉树的基本概念、实现方法和遍历算法。主要内容包括:1)二叉树的递归结构特性,重点区分满二叉树和完全二叉树;2)二叉树结构的实现过程;3)前序、中序、后序三种遍历方式的原理和实现;4)基于递归思想的二叉树算法,如求结点数、叶子数、树高等;5)层序遍历实现及应用;6)完全二叉树的判断方法。文章强调递归思想在树结构中的核心作用,通过大量图示和代码示例,详细展示了如何将二叉树问题转化为左右子树的递归问题求解。最后通过一个综合应用案例,说明了如何根据前序字符串构建二叉树并进行中序遍历。原创 2025-09-11 17:49:00 · 1082 阅读 · 0 评论
分享