自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

2301_79932175的博客

写博客的初衷是提升自己,希望也可以对大家有所帮助。

  • 博客(30)
  • 收藏
  • 关注

原创 【数据结构】栈和队列

本文核心梳理栈、队列及衍生的单调栈、单调队列核心知识。栈和队列均为操作受限的线性表,核心区别在于存取规则:栈遵循后进先出(LIFO),仅可操作栈顶;队列遵循先进先出(FIFO),队尾入队、队头出队,二者均可通过数组配合指针模拟实现。在此基础上,单调栈通过维护栈内元素单调递增或递减,能以 O (n) 时间复杂度找到数组中每个元素单侧第一个最值;单调队列则通过维护队列单调性,高效解决滑动窗口内的最大值、最小值问题。这些结构通过淘汰无用元素优化效率,是对应问题的最优解法。

2026-04-21 21:02:09 562

原创 【数据结构】链表

本文介绍了使用数组模拟链表的核心方法。单链表通过val数组存储节点值,next数组存储下一节点下标,实现头部插入、删除和指定位置插入操作。双链表增加l数组存储前驱节点,支持双向遍历和更灵活的节点操作。两种方法都通过idx管理可用下标,相比指针实现更节省内存且效率更高。单链表适合简单场景如邻接表,双链表适用于需要双向遍历的应用如LRU缓存。数组模拟避免了动态内存分配,是算法竞赛中常用的链表实现方式。

2026-04-20 21:23:08 509

原创 【搜索与图论】BFS与DFS的区别

DFS与BFS算法对比摘要 DFS(深度优先搜索)和BFS(广度优先搜索)是图论中两种基础遍历算法。DFS采用栈结构,优先纵向深入探索路径,适合解决路径搜索、拓扑排序等问题;BFS使用队列结构,按层次横向扩展搜索,擅长处理最短路径、层序遍历等场景。二者核心区别在于:DFS强调深度挖掘(空间复杂度O(h)),BFS注重广度覆盖(空间复杂度O(w))。DFS适用于回溯类问题,BFS则更擅长无权图的最短路径搜索。实际应用中,选择哪种算法取决于具体问题需求,有时需要结合使用。

2026-04-20 16:33:33 486

原创 【数学知识】欧拉函数和快速幂

文章系统介绍了欧拉函数与快速幂两大数论工具。欧拉函数部分阐述了其定义(1~n中与n互质的数的个数)、质因数分解计算公式、积性函数性质,并给出单次计算和线性筛批量求解的算法实现(时间复杂度分别为O(√n)和O(n))。快速幂部分解析了通过指数二进制分解实现O(logn)复杂度的幂运算方法,以及基于费马小定理的逆元求解技术。两类算法均配有AcWing例题的完整代码实现,突出展示了它们在数论问题中的高效应用价值。

2026-03-27 18:32:52 812

原创 【数学知识】质数和约数

本文系统介绍了质数判定与约数计算的相关算法。主要内容包括:1)质数判定方法:试除法及其优化版本(时间复杂度O(√n))、埃氏筛法(O(nloglogn))和线性筛法(O(n));2)约数计算方法:试除法求约数、约数个数公式、约数之和公式;3)最大公约数的欧几里得算法。通过代码示例详细展示了每种算法的实现过程,并分析了时间复杂度。这些算法是数论基础,在编程竞赛和算法设计中具有广泛应用价值。

2026-03-26 11:46:56 956

原创 【搜索与图论】BFS算法(广度优先搜索)

BFS(广度优先搜索)是一种基于队列的图遍历算法,通过逐层扩展搜索来解决问题。其核心是使用队列存储待访问节点,并标记已访问节点以避免重复处理。算法适用于无权图的最短路径问题,如迷宫寻路和八数码问题。在迷宫问题中,BFS通过方向数组探索相邻格子,记录步数并找到最短路径;八数码问题则通过状态转换和字典记录步数来求解。BFS保证首次到达目标时即为最短路径,时间复杂度通常为O(V+E)。该算法简洁高效,是解决最短路径问题的经典方法。

2026-03-21 18:20:16 670

原创 【搜索与图论】DFS算法(深度优先搜索)

深度优先搜索(DFS)是一种基于栈结构的树/图遍历算法,采用"深入到底再回溯"的策略。文章详解了DFS的核心概念(回溯、剪枝)和两种实现方式(递归隐式栈/迭代显式栈),并通过排列数字和N皇后问题两个经典例题展示DFS应用。其中N皇后问题给出两种解法:按行递归和逐个格子搜索,均通过标记占用和回溯状态来实现。DFS的关键在于正确处理访问标记、递归调用和状态恢复。

2026-03-20 18:51:39 815

原创 区间合并算法

本文介绍了区间合并算法,该算法用于将重叠或相邻的闭区间合并为不重叠的连续区间。算法思路包括:1)按左端点排序区间;2)遍历并比较相邻区间,合并重叠部分。文章提供了具体实现代码,使用C++的vector存储区间,通过排序和遍历完成合并,时间复杂度为O(nlogn)。最后强调了实现时需注意排序、重叠判断、边界处理等关键点。该算法在数据处理和优化问题中有广泛应用。

2026-03-19 20:14:37 582

原创 离散化(特指整数离散化)

本文介绍了离散化算法及其应用。离散化通过将大范围稀疏数据映射到小范围连续索引,有效解决空间浪费问题,同时保持数据相对大小关系。实现步骤包括:收集原始数据、排序去重、建立映射(推荐二分查找)。以区间和问题为例,演示了离散化的具体应用:先处理所有坐标,建立映射数组,再通过前缀和计算区间和。离散化能显著优化大范围稀疏数据的处理效率,核心在于掌握排序、去重和二分查找三个关键步骤。

2026-03-19 11:41:28 507

原创 基础算法----位运算

本文介绍了位运算的基础概念与应用。主要内容包括:1)二进制表示方法(原码、反码、补码);2)常用位运算符(与、或、异或、取反、位移等)及其运算规则;3)通过例题"二进制中1的个数"展示两种解题方法:逐位右移检查法和lowbit法。其中lowbit法利用x&-x快速定位最低位的1,通过循环统计1的个数,效率较高。文中提供了两种方法的C++实现代码,适用于处理非负整数或无符号整数的位运算问题。

2026-03-18 20:10:30 574

原创 二分(整数二分、浮点数二分)

本文介绍了二分算法的基本概念和应用场景。二分算法分为整数二分和浮点数二分两种类型,前者处理离散数据需注意边界条件,后者处理连续数据需设置精度。文章重点讲解了二分查找和二分答案两种应用方式,并通过多个例题(如A-B数对、木材加工等)展示了具体实现方法。在解题过程中,强调了对数据排序、边界条件处理和避免死循环等关键点。二分算法的核心在于利用单调性进行折半搜索,能有效降低时间复杂度,适用于优化问题和有序数据查询。

2026-03-16 22:06:36 658

原创 双指针算法

双指针算法是一种优化线性数据结构处理的技巧,通过两个指针的协同移动将时间复杂度从O(n²)降至O(n)。主要包括三种类型:对撞指针(头尾向中间移动)、同向指针(同端不同速移动)和滑动窗口(维护可变区间)。文章通过四个典型例题展示了应用场景:1)滑动窗口求最长无重复子序列;2)滑动窗口实现画展最优区间选择;3)对撞指针解决数组元素目标和问题;4)同向指针判断子序列。每个例题都给出了详细思路和代码实现,最后强调双指针算法通过优化暴力解法来提升效率,是处理线性结构问题的有效方法。

2026-03-15 14:56:18 619

原创 差分算法(一维差分、二维差分)

本文介绍了差分数组的概念及其应用。差分数组通过存储相邻元素的差值,能高效处理区间增量操作。一维差分模板题展示了暴力解法(O(nm))和差分优化(O(m+n))两种方法。二维差分则通过四角标记法处理矩阵区间操作。例题包括"海底高铁"的最优购票策略和"地毯"问题的矩阵覆盖统计。差分数组通过O(1)时间完成区间修改,配合前缀和还原,显著提升算法效率,是处理批量区间操作的经典技巧。

2026-03-13 18:32:01 693

原创 前缀和算法

本文介绍了前缀和算法及其应用。前缀和是一种预处理技术,通过空间换时间优化区间求和计算。文章首先讲解一维前缀和的实现,对比暴力解法(O(mn))和前缀和解法(O(m+n)),给出模板代码;然后通过最大子段和问题展示前缀和的应用。接着介绍二维前缀和,分析暴力解法(O(nm×q))的不足,详细说明二维前缀和的构建方法和查询公式,并给出完整代码实现。全文通过具体例题展示了前缀和算法在降维优化中的重要作用。

2026-03-12 21:33:18 469

原创 枚举算法(暴力枚举)

本文介绍了枚举算法的定义与核心思想,通过三个典型例题展示其应用。枚举算法通过不重复、不遗漏地列举所有可能情况来解决问题,包括普通枚举和二进制枚举两种形式。在"铺地毯"例题中采用逆序查找方式确定最上层地毯;"回文日期"问题通过遍历日期并转换为字符串进行判断;"子集"问题则利用二进制数的位状态表示元素选择情况。文章强调枚举算法虽简单直接但效率较低,是算法学习的重要基础方法。

2026-03-11 21:44:06 632

原创 高精度(二)---高精度乘法和高精度除法

本文介绍了高精度乘法和除法的实现方法。高精度乘法采用数组逆序存储数字,通过无进位相乘后相加再处理进位的方式实现,并注意处理前导0。高精度除法则是被除数为高精度、除数为int的情况,从高位到低位逐步计算商和余数。两种算法都遵循数组存储加手动模拟运算的核心思想,其中乘法适用于高精度与高精度运算,除法适用于高精度与低精度运算。代码示例展示了具体的实现过程,包括数组处理、运算模拟和前导0处理等关键步骤。

2026-03-11 13:34:35 403

原创 高精度(一)---高精度加法和高精度减法

本文介绍了高精度算法的基本概念和实现方法,重点讲解了高精度加法和减法的处理流程。高精度算法通过数组存储超长数字并模拟手工运算过程,解决了计算机常规数据类型无法处理大数的问题。加法算法采用逐位相加、处理进位的方式;减法则需先比较数字大小,处理借位并消除前导零。两种算法都采用逆序存储数字的方法简化运算,并给出了完整的C++实现代码。文章后续将介绍高精度乘法和除法的实现方法。

2026-03-10 21:23:50 282

原创 基础算法---简单模拟

本文介绍了模拟算法的基本概念和应用实例。模拟算法是将问题描述直接转化为代码实现的方法,其特点包括步骤明确、状态跟踪、条件驱动和直观易懂。文章通过两个典型例题进行说明:多项式输出问题中,通过判断系数符号、数字和指数来格式化输出;蛇形矩阵问题则通过方向向量和边界判断实现数字填充。两个案例都展示了模拟算法将问题规则直接转化为代码逻辑的特点,虽然代码量较大但思路清晰。

2026-03-09 21:25:11 320

原创 排序算法对比总结

本文对比分析了五种经典排序算法:冒泡排序、选择排序、插入排序、快速排序和归并排序。冒泡排序通过相邻元素比较交换实现排序,简单稳定但效率低;选择排序每次选取最小元素,交换次数少但不稳定;插入排序类似整理扑克牌,适合小规模数据;快速排序采用分治策略,平均性能优异但不稳定;归并排序同样采用分治,稳定但空间复杂度较高。各算法在时间复杂度、稳定性等方面表现各异,需根据数据规模、有序程度等实际需求选择合适算法。小规模数据可选简单排序,大规模数据推荐快速或归并排序。

2026-02-04 13:11:37 1250

原创 排序算法(三)---快速排序、归并排序

本文介绍了两种经典排序算法:快速排序和归并排序。快速排序采用分治策略,通过选择基准元素、分区和递归排序实现,时间复杂度最好为O(nlogn),最坏为O(n²)。文章详细展示了基础快速排序代码,并针对基准选择不当和重复元素问题提出了随机基准和三路分区的优化方案。归并排序同样采用分治法,通过分解和合并有序子数组实现,时间复杂度稳定为O(nlogn),文中提供了完整的归并排序实现代码。

2026-02-03 19:07:44 535

原创 排序算法(二)---插入排序

本文介绍了插入排序算法的原理与实现。插入排序通过将无序部分的元素逐个插入到有序部分的正确位置来完成排序,初始时有序部分仅包含第一个元素。其时间复杂度在最坏情况下为O(n²),最好情况下为O(n)。文章详细描述了算法步骤,并提供了C++实现代码,包括主函数读取输入、调用排序函数和输出排序结果的完整示例。

2026-02-02 16:35:19 542

原创 排序算法(一)---选择排序、冒泡排序

本文介绍了两种基础排序算法。选择排序通过每次选择未排序序列中的最小元素放到已排序序列末尾,时间复杂度为O(n²),适用于小规模数据。冒泡排序通过相邻元素比较交换将最大元素"冒泡"到末尾,最好情况时间复杂度O(n),最坏和平均情况为O(n²)。两种算法均提供了C++实现代码,包含输入处理、排序函数和输出功能,其中冒泡排序通过标志位优化对已有序序列的处理。

2026-01-26 17:51:28 323

原创 C++语法基础--STL、位运算、常用库函数

本文介绍了C++ STL中常用的容器和算法。主要内容包括:1)vector、queue、stack、deque、set、map等容器的基本操作和使用方法;2)位运算操作,如求某一位数字、lowbit计算等;3)常用库函数,包括reverse翻转、unique去重、random_shuffle随机打乱、sort排序以及lower_bound/upper_bound二分查找。通过具体代码示例详细展示了各个容器和函数的使用方式。

2026-01-25 19:25:54 908

原创 C++语法基础--类、结构体、指针、引用

本文介绍了C++中的类和结构体、指针和引用的基本概念。类和结构体用于封装数据和方法,主要区别在于默认访问权限不同(类private,结构体public)。指针是存储变量地址的变量,可以通过指针修改原变量值,数组名是一种特殊指针。引用相当于变量别名,必须初始化且不可更改绑定对象。文章通过代码示例展示了类的成员访问控制、指针操作和引用使用等核心知识点,为理解C++面向对象编程和内存操作提供了基础指导。

2026-01-19 16:58:11 195

原创 C++语法基础--函数

本文介绍了C++函数的基础知识与应用。主要内容包括:1)函数定义与调用,通过求最大值示例说明;2)参数传递方式(传值与引用),以交换函数为例展示区别;3)数组作为形参的多种写法及效果;4)返回类型和return语句的使用规范;5)递归函数的实现原理,通过斐波那契数列和阶乘两个经典案例演示递归应用。文中强调形实参匹配、作用域规则等关键概念,并指出递归虽简洁但可能存在效率问题。通过代码示例直观展示各类函数特性,为函数编程提供实践参考。

2026-01-18 16:54:10 541

原创 C++语法基础--字符串

本文介绍了字符处理的相关知识,主要包括:1. 字符与整数的转换关系,通过ASCII码实现字符运算;2. 字符数组的定义和使用方法,包括输入输出、常用操作(strlen、strcmp、strcpy)及遍历;3. string字符串的操作,如初始化、比较、拼接、长度判断等;4. 两个实例:统计字符出现次数和字符替换。文章通过代码示例详细说明了字符处理的各种应用场景和实现方法。

2026-01-17 17:15:13 970

原创 C++语法基础--数组

本文介绍了C++中数组的基本用法和应用实例。主要内容包括:一维数组的定义、初始化和访问方法;多维数组的概念;三个典型例题(斐波那契数列、数组逆序输出、数组旋转)的实现思路和代码;以及常用的内存操作函数memset和memcpy的使用方法。文章通过具体代码示例展示了数组在算法问题中的应用,包括时间复杂度分析,为初学者提供了数组编程的实用指南。

2026-01-16 16:54:00 594

原创 C++语法基础--循环语句

本文介绍了三种循环语句(while、do-while、for)的执行顺序和使用模板,其中for循环使用频率最高。同时讲解了break和continue跳转语句的用法,以及循环嵌套的两种方式。最后通过斐波那契数列、质数判断和菱形打印三个例题,展示了不同循环结构的实际应用,并提供了完整代码实现,包括实心和空心菱形的打印方法。

2026-01-15 18:08:43 577

原创 C++语法基础--判断语句

本文介绍了C++中if语句的基本用法和条件判断技巧。主要内容包括:1)基本if-else语句结构,通过绝对值计算示例展示语法;2)if-else if多条件判断,以分数评级为例;3)逻辑运算符(&&、||、!)的使用及优先级规则,通过闰年判断案例演示复杂条件组合。

2026-01-14 18:02:09 324

原创 C++语法基础--变量、输入输出、表达式

c++入门--关于变量,输入输出,表达式的基础知识

2026-01-13 19:42:59 288

空空如也

空空如也

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

TA关注的人

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