自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法基础(数论)—费马小定理

本文摘要: 本文系统介绍了数论中的核心概念与算法,主要包括: 费马小定理及其应用 同余运算的性质(同加性、同乘性) 快速幂算法实现(O(logn)时间复杂度) 解决除法取模问题的逆元计算方法 欧拉定理扩展应用 欧拉函数计算与快速幂结合 处理超大指数问题的降幂技巧 递归求解固定余数问题 裴蜀定理与扩展欧几里得算法 求解二元一次不定方程 计算同余方程的最小正整数解 解决青蛙约会等实际问题 乘法逆元的三种求法 费马小定理法(要求模数为质数) 扩展欧几里得法(更通用) 线性递推法(批量求逆元) 文中通过洛谷、牛客等

2025-12-28 08:03:11 795

原创 算法基础(数论)—欧拉函数

摘要:本文介绍了欧拉函数的定义与性质,并给出两种计算欧拉函数的实现方法。欧拉函数φ(n)表示1~n中与n互质的数的个数,具有积性函数特性。文中提供了单点计算的phi函数和线性筛预处理1~n欧拉函数的方法,时间复杂度分别为O(√n)和O(n)。最后通过仪仗队和GCD两道例题展示了欧拉函数的应用:前者统计互质坐标对,后者计算gcd为素数的数对数量,均通过预处理欧拉函数前缀和来优化计算。

2025-12-25 11:32:33 580

原创 算法基础(数论)—约数

本文介绍了求整数约数的两种主要方法:试除法和倍数法。试除法通过枚举1到√n的数,利用约数成对性高效求解单个数的约数及和,时间复杂度为O(√n)。倍数法适用于求1到n每个数的约数集合,通过枚举约数的倍数实现,时间复杂度为O(nlogn)。文章还给出了牛客网两道典型题目的解法:求自然数N的约数之和采用试除法;求1到n所有数约数个数之和则通过统计每个数作为约数出现的次数来优化计算。两种方法各具优势,适用于不同场景的约数计算需求。

2025-12-25 10:19:59 780

原创 算法基础(数论)—算法基本定理

本文介绍了算术基本定理及其在编程中的实现方法。主要内容包括: 算术基本定理的概念:任何大于1的自然数都可以唯一分解为有限个质数的乘积 质因数分解的代码实现,包括试除法分解质因数的方法 两个阶乘分解的算法题解: 对于N≤10000的情况,采用逐个分解的方法 对于N≤1e6的情况,使用欧拉筛法先筛出质数,再通过数学公式计算各质数在阶乘中的次数 提供了完整的C++代码实现,包含详细的注释说明 文章通过具体题目示例,展示了如何高效实现大数阶乘的质因数分解,并分析了不同解法的时间复杂度。

2025-12-25 09:45:54 296

原创 算法基础(数学)—数论

本文系统介绍了算法竞赛中常用的数学知识,重点讲解了数论、组合数学、线性代数等核心内容。在数论部分详细阐述了最大公约数、最小公倍数的计算方法和欧几里得算法实现,并通过两道例题展示具体应用。质数判定部分介绍了试除法判断质数的方法,并对比了埃氏筛法和线性筛法两种质数筛法,分析了它们的时间复杂度差异。文章还提供了多个典型例题的参考代码,包括素数密度等较难题目,强调实践操作的重要性,建议读者通过纸笔练习加深理解。这些数学工具和算法是解决竞赛问题的基础,掌握它们对提升算法能力至关重要。

2025-12-25 08:54:51 991

原创 算法基础-多源最短路

摘要:本文介绍了多源最短路问题及其Floyd算法实现。Floyd算法通过动态规划思想,以O(n³)时间复杂度计算图中所有点对的最短路径,适用于带权有向/无向图(允许负权边但不含负环)。文章详细讲解了Floyd的状态表示(f[k][i][j])、状态转移方程(分是否经过k点两种情况)和空间优化技巧,并提供了四个典型例题的解法:1)模板题直接应用Floyd;2)寻宝问题累加路径和;3)灾后重建问题按时间动态更新;4)无向图最小环问题利用Floyd特性求解。每个问题均附完整代码实现,展现了Floyd算法的灵活应用

2025-12-23 18:21:41 730

原创 算法基础-单源最短路

本文系统讲解了单源最短路径算法,包括Dijkstra算法(常规版和堆优化版)、Bellman-Ford算法和SPFA算法。Dijkstra适用于非负权图,通过贪心策略逐步确定最短路径;堆优化版利用优先队列提高效率。Bellman-Ford和SPFA能处理负权边,SPFA是对BF算法的队列优化。文章还提供了多个经典例题的代码实现,如邮递员送信、采购特价商品等,涵盖最短路径问题的常见应用场景和解题技巧。

2025-12-23 09:49:19 854

原创 算法基础(图论)—拓扑排序

拓扑排序拓扑排序1有向⽆环图若⼀个有向图中,则称为(directed acycline graph),简称 DAG 图。2.AOV ⽹举⼀个现实中的例⼦:课程的学习是有优先次序的,如果规划不当会严重影响学习效果。课程间的先 后次序可以⽤有向图表⽰:ViVjViVjAOV ⽹中不能有回路,否则就不能确定回路中的活动究竟哪个先实施。3拓扑排序拓扑排序的⽬标是将,使得。在课程问题中,相当于就是找到⼀个排课的合法顺序。具体流程可借助进⾏:1.将图中所有⼊度为 0 的点,加⼊到队列中;2.

2025-12-22 09:43:16 763

原创 算法基础-图论基础

本文系统介绍了图论的基本概念、存储方式和常见算法。主要内容包括:1. 图的基本定义与分类(有向/无向图、简单/多重图、稠密/稀疏图);2. 图的存储方法(邻接矩阵、vector数组、链式前向星);3. 图的遍历算法(DFS和BFS);4. 最小生成树算法(Prim和Kruskal)及其应用实例。文章通过代码实现详细讲解了每种算法的具体应用,并提供了洛谷相关题目的参考解答,适合作为图论学习的入门资料。

2025-12-21 21:29:29 895

原创 算法基础(区间DP)

区间DP是一种动态规划方法,通过小区间推导大区间的解。本文介绍了几个经典区间DP问题:1. 回文字串问题(P1435)通过动态规划计算将字符串变为回文所需最少插入字符数;2. 零食售卖问题(P2858)利用区间DP求环形零食售卖顺序的最大收益;3. 石子合并问题(P1775和P1880)分别处理线性和环形情况,计算合并相邻石子的最小/最大代价;4. 数字合并游戏(P3146)通过相邻相同数字合并获得更高数字,求最大可能值。这些问题都采用区间DP思想,通过枚举区间长度、端点和分割点进行状态转移。

2025-12-21 12:24:36 539

原创 算法基础(背包问题)—分组背包和混合背包

本文介绍了三种背包问题的变体解法:1. 分组背包问题(洛谷P1757):将物品分组后每组最多选一件,使用二维DP状态表示,通过逆序遍历重量避免重复选择。2. 排兵布阵问题(洛谷P5322):将每个城堡视为一组,对敌方兵力排序后转化为分组背包问题,通过状态转移计算最大得分。3. 混合背包问题(洛谷P1833):处理包含01背包、完全背包和多重背包的混合情况,根据物品类型分别采用正序或逆序遍历。4. 多维费用背包(洛谷P1910):在01背包基础上增加伪装能力和工资两个维度,使用三维DP状态进行求解。各解法均通

2025-12-20 18:45:15 962 1

原创 算法基础(背包问题)-多重背包

摘要:本文解析了两个典型动态规划问题。多重背包问题要求在不超承重限制下最大化背包价值,提供常规解法和二进制优化解法(转换为01背包)。摆花问题则要求计算恰好摆放m盆花的方案数,属于多重背包求方案数模型,强调不可使用二进制优化以避免重复统计。两题均采用动态规划思想,通过状态转移方程求解,但需注意不同问题的特性(如优化限制)和初始化条件(如摆花问题中dp[0][0]=1的起始状态)。

2025-12-20 17:20:48 614

原创 算法基础(背包问题)-完全背包

本文介绍了完全背包问题的三种典型应用场景及解法。首先通过牛客网模板题讲解基础完全背包的两种状态(不超过容量和恰好装满),给出状态转移方程和初始化技巧。其次以洛谷P1616为例展示完全背包在采药问题中的简单应用。最后通过P2918和P5662两道题,分别演示了完全背包在"至少重量"限制和动态规划与贪心结合的场景下的解法。所有解法均包含状态表示、转移方程、初始化和空间优化思路,并附参考代码实现。文章通过具体题目展现了完全背包问题的灵活应用和变通解法。

2025-12-20 10:43:04 959

原创 算法基础-背包问题(01背包问题)

本文系统介绍了背包问题及其经典变体,重点解析了01背包问题的解题思路与实现方法。文章首先概述了背包问题的基本形式(在容量限制下选择物品使价值最大)及其六种主要变体(01背包、完全背包、多重背包等),指出01背包是其他变体的基础。通过牛客网例题详细讲解了01背包的两类解法:不要求装满和必须恰好装满的情况,包括状态表示、转移方程、初始化和空间优化技巧。随后展示了三个经典题目(采药、点菜、奶牛飞盘队)的代码实现,分别对应价值最大化、方案计数和模数约束等不同需求。全文强调动态规划在解决背包问题中的核心作用,通过状态

2025-12-20 09:13:18 928

原创 算法基础-路径类dp

本文介绍了路径类动态规划(DP)及其典型应用,包括矩阵最小路径和、迷雾森林、过河卒、方格取数等问题,以及经典线性DP问题如最长上升子序列(LIS)和最长公共子序列(LCS)。路径类DP通过状态表示、转移方程、初始化和填表顺序四个步骤解决矩阵中的行走规则问题。经典线性DP则通过优化状态表示(如四维降三维)和利用贪心+二分等技巧提升效率。文章提供了每个问题的详细解法、代码实现和复杂度分析,涵盖从入门到进阶的DP应用场景,帮助读者掌握动态规划的核心思想与解题方法。

2025-12-17 22:50:47 652

原创 算法基础-动态规划

本文系统讲解了动态规划算法的核心思想与解题方法。首先指出动态规划是算法学习中的难点,具有入门难、题型多、题目难三大特点。文章通过斐波那契数列问题,循序渐进地介绍了从记忆化搜索到递推式动态规划的转化过程,并详细解释了状态表示、状态转移方程和初始化等核心概念。随后,通过下楼梯、数字三角形、台阶问题、最大子段和、传球游戏和乌龟棋等经典例题,展示了如何运用动态规划解决实际问题。每个例题都包含完整的状态分析、转移方程推导和代码实现,其中特别强调了空间优化技巧。文章最后指出,动态规划虽然复杂,但通过大量练习和循序渐进的

2025-12-17 19:23:31 675

原创 算法基础-字典树

本文介绍了字典树(Trie树)的概念、作用及实现方法。字典树是一种高效存储和查询字符串的数据结构,利用公共前缀组织成树形结构。文章详细讲解了字典树的插入、查询字符串出现次数和前缀查询的实现代码,并提供了三个典型应用案例:1)模板题展示字典树基本操作;2)点名系统实现名字查重;3)利用字典树求解最大异或对问题。每个案例都包含题目解析和完整参考代码,展示了字典树在不同场景下的应用方式。

2025-12-16 15:02:56 701

原创 算法基础-字符串哈希

字符串哈希字符串哈希1.回忆:哈希函数与哈希冲突2.字符串哈希定义⼀个把字符串映射到整数的函数hash,这就是字符串哈希。说⽩了,就是将⼀个字符串⽤⼀个 整数表⽰。3.字符串哈希中的哈希函数在字符串哈希中,有⼀种冲突概率较⼩的哈希函数,将字符串映射成p进制数字:hashs) =si] ×pi=0 ∑n−1n−i−1modM其中p, 通常取质数131 或者13331。如果把哈希值定义为类型,在 C++ 中,溢出就会⾃动取模。

2025-12-16 14:03:37 589

原创 算法基础-并查集

本文介绍了并查集数据结构及其应用。主要内容包括:1. 基本概念:使用双亲表示法实现森林结构,支持集合查询、合并和判断操作。2. 实现方法:初始化时每个元素自成一个集合,通过路径压缩优化查询效率,时间复杂度接近O(1)。3. 典型应用:解决亲戚关系判断、水塘计数、程序约束验证等问题。4. 扩展形式:包括扩展域并查集(处理多种关系)和带权并查集(维护元素间距离信息)。5. 实际案例:给出团伙问题、食物链问题和银河英雄传说等经典题目的代码实现。并查集是一种高效处理集合合并与查询问题的数据结构,在算法竞赛和实际问题

2025-12-16 09:04:16 648

原创 算法基础-(单调队列)

本文介绍了单调队列及其应用。单调队列是一种元素单调递增或递减的双端队列,主要用于解决滑动窗口的最值问题。通过洛谷P1886和P2251两个例题,展示了如何使用单调队列高效求解滑动窗口内的最小值和最大值。文章详细解析了算法实现步骤:维护单调性队列、控制窗口范围、输出队首最值,并提供了完整的C++代码实现。该算法时间复杂度为O(n),适用于大规模数据(n≤10^6),是处理滑动窗口问题的经典方法。

2025-12-15 21:10:19 882

原创 算法基础-(数据结构)

本文介绍了单调栈的概念及其应用。单调栈是一种具有单调性(递增或递减)的栈结构,主要用于解决四种问题:寻找元素左右侧最近且比它大/小的元素。通过示例代码演示了如何实现单调递增栈和递减栈,并详细讲解了解决这四类问题的具体方法:左侧问题正序遍历,右侧问题逆序遍历;找更大元素用递减栈,找更小元素用递增栈。最后以洛谷P5788模板题为例,展示了如何用单调递减栈从右向左遍历数组,快速找到每个元素右侧第一个更大元素的下标。

2025-12-13 21:05:10 629

原创 算法基础—搜索(2)【记忆化搜索+BFS+01BFS+Floodfill]

本文介绍了搜索算法中的深度优先搜索(DFS)、宽度优先搜索(BFS)及其优化技巧,并通过多个经典题目展示了具体应用。主要内容包括: 深度优先搜索(DFS): 小猫爬山问题:通过剪枝优化搜索过程,如全局变量记录最小缆车数、从大到小安排猫咪等。 记忆化搜索:通过"备忘录"记录搜索结果,避免重复计算,应用于斐波那契数列、Function等问题。 滑雪问题:利用记忆化搜索优化矩阵中最长滑坡的求解。 宽度优先搜索(BFS): 马的遍历:解决边权为1的最短路径问题。 kotori和迷宫:多源BFS计

2025-12-13 12:56:49 797

原创 算法基础-搜索(1)

本文介绍了搜索算法的基本概念和常见应用。搜索是通过枚举所有可能情况来寻找最优解或统计合法解的方法,主要包括深度优先搜索(DFS)和广度优先搜索(BFS)。文章详细讲解了递归型枚举、组合型枚举和排列型枚举的实现方法,并通过多个例题(如子集枚举、组合数生成、八皇后问题等)展示了DFS的具体应用。同时介绍了剪枝优化技巧,包括可行性剪枝、最优性剪枝等,以提高搜索效率。最后以数独求解和数的划分为例,展示了如何在实际问题中应用DFS和剪枝策略。代码示例清晰展示了各算法的实现细节。

2025-12-11 11:36:37 780

原创 数据结构(17)(八大排序)

本文详细介绍了八大排序算法,包括插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序和计数排序,涵盖了它们的基本思想、代码实现、时间复杂度分析和稳定性。同时,还提到了内排序和外排序的概念,以及如何转换递归版本的快速排序为非递归版本。文章末尾提供了完整的C语言代码实现。

2025-12-10 23:05:06 980

原创 数据结构(16)二叉树的层序遍历+判断完全二叉树

本文介绍了二叉树的层序遍历实现方法及完全二叉树的判断。首先详细讲解了使用队列实现层序遍历的过程,包括队列的数据结构定义、初始化、入队出队等操作。然后给出了层序遍历的具体实现代码,通过根节点入队、记录队头、打印数据、子节点入队的循环过程完成遍历。接着提出了判断完全二叉树的算法思路:在层序遍历基础上允许空节点入队,若遇到空节点后仍有非空节点则不是完全二叉树。最后提供了一个牛客网编程题目示例,展示如何根据前序字符串构建二叉树并进行中序遍历。全文通过具体代码示例详细讲解了二叉树相关算法的实现过程。

2025-12-10 20:31:12 742

原创 数据结构(15)二叉树OJ

本文介绍了二叉树相关算法题的解析与实现,主要包括: 二叉树遍历(前序、中序、后序) 单值二叉树判断 二叉树最大深度计算 平衡二叉树判断 二叉树翻转 相同树判断 对称二叉树判断 子树判断 所有题目均采用递归解法,给出了详细的核心代码实现和思路分析。其中前序遍历通过辅助函数计算树大小并动态分配数组实现;单值二叉树通过比较节点值递归判断;最大深度通过比较左右子树深度计算;对称二叉树通过镜像比较实现;子树判断复用相同树判断函数遍历主树节点实现。

2025-12-10 19:51:50 821

原创 数据结构(14)二叉树的模拟实现和便利代码

本文介绍了二叉树的基本概念和操作实现。主要内容包括:1.二叉树的递归定义和节点结构;2.二叉树的创建方法;3.三种深度优先遍历(前序、中序、后序)的递归实现;4.常用接口函数实现(节点计数、叶子节点计数、层级节点查找、值查找、销毁等);5.层序遍历的基本思想。文章通过代码示例详细展示了二叉树各项操作的实现逻辑,特别是利用递归思想解决树结构问题的典型方法,为后续学习更复杂的树操作奠定了基础。

2025-12-10 17:20:55 698

原创 数据结构(13)堆解决Topk问题+堆概念选择题

最大的前K个数一定会比其他数要大,只要进来的数比堆顶数据大,就替代它。因为是小堆(小的在上大的在下),最大的数进去后一定会沉到下面,所以不可能存在大的数堵在堆顶导致某个数进不去的情况,数越大沉得越深。对应地,如果使用大堆就会出现一个大数堵在堆顶,剩下的数都比这个大数小,导致其他数进不来,最后只能选出最大的那一个。(以下两个力扣题可以用其它排序解决(比如C++中自带的更优的快排)不过是看你是面向offer还是面向竞赛或刷题了。

2025-12-10 16:39:11 694

原创 数据结构(12)堆排序

堆排序是一种基于堆数据结构的选择排序算法,通过构建大堆(升序)或小堆(降序)实现排序。算法分为两步:首先通过向下调整算法构建初始堆(时间复杂度O(N)),然后通过反复交换堆顶与末尾元素并调整堆完成排序(时间复杂度O(N*logN))。堆排序空间复杂度为O(1),但不稳定。实现时需注意升序建大堆、降序建小堆的关键区别,并通过调整父子节点关系维持堆性质。典型实现包括交换函数、向下调整函数和主排序函数,通过比较和交换操作逐步完成排序。

2025-12-09 20:55:34 804

原创 数据结构(11)堆的分步构建

本文详细介绍了堆数据结构的实现方法,包括堆的基本性质、存储结构以及相关操作。主要内容包括:1. 堆的结构体定义和基础接口函数实现;2. 大堆和小堆的插入操作及对应的向上调整算法;3. 堆的删除操作及向下调整算法;4. 完整的大堆和小堆实现代码,包含初始化、销毁、打印、判空、获取堆顶元素等基础功能。文章通过代码示例展示了堆的核心操作原理,为后续学习堆排序打下基础。

2025-12-09 19:48:24 625

原创 数据结构(10)树和二叉树和堆的概念及结构

本文系统介绍了树和二叉树的基本概念及结构。首先阐述了树的定义、相关术语(如节点度、父节点、子树等)和三种表示方法(指针数组、顺序表、左孩子右兄弟法)。其次详细讲解了二叉树的特性,包括满二叉树、完全二叉树的定义,以及二叉树的四种重要性质。最后介绍了堆的概念,区分了大堆和小堆的特点,并说明堆在排序算法和TopK问题中的应用。文章通过图示和选择题解析,深入浅出地展现了这些非线性数据结构的特点和实际应用价值。

2025-12-09 18:21:31 801

原创 数据结构(9)队列的概念和实现

本文介绍了队列的基本概念和实现方法。队列是一种遵循先进先出(FIFO)原则的线性表,包含队头和队尾指针。文章详细讲解了链式队列的实现代码,包括初始化、销毁、入队、出队等操作。同时探讨了如何用两个队列实现栈的功能,以及循环队列的设计思路。循环队列通过多开一个空间解决了判空和判满问题,提供了数组实现的具体代码示例。这些数据结构在实际应用中具有重要意义,如操作系统中的生产者消费者模型就使用了循环队列的概念。

2025-12-09 17:36:52 735

原创 数据结构(8)栈的概念和实现

本文介绍了栈的基本概念和实现方式。栈是一种遵循LIFO(后进先出)原则的线性表,支持压栈(入栈)和出栈操作。文章比较了数组栈和链式栈的优缺点,指出数组栈在尾插尾删效率和缓存利用率方面更优。详细展示了动态栈的实现代码,包括初始化、销毁、入栈、出栈等操作。最后通过力扣20题"有效的括号"展示了栈的实际应用,解题思路是使用栈来匹配括号对。文章为后续队列内容的讲解做了铺垫。

2025-12-07 21:35:04 835

原创 数据结构(7)带头双向循环链表的实现

本文详细讲解了双向循环链表的实现原理和代码。重点介绍了两种常用链表结构:无头单向非循环链表和带头双向循环链表。通过代码示例展示了双向链表的核心操作,包括初始化、插入、删除、查找等函数实现。特别强调了insert和erase两个关键接口的重要性,通过复用这两个函数可以简化头尾操作。最后对比了顺序表和链表的优缺点,指出双向链表虽然结构复杂但实现简单,具有结构优势。文章提供了完整的代码实现,包括头文件定义和测试用例,为学习链表数据结构提供了实用参考。

2025-12-07 17:36:07 691

原创 数据结构(6)(八道链表面试题)

本文总结了链表相关的经典算法题及解法,主要包括: 链表分割:使用哨兵节点将链表按特定值分割为两部分 回文链表判断:通过快慢指针找中点并反转后半部分进行比较 链表相交检测:计算长度差后同步遍历寻找交点 环形链表检测:快慢指针相遇判断是否存在环 带随机指针链表的深拷贝:通过节点复制和链接处理实现 链表插入排序:维护已排序部分并逐个插入新节点 删除重复节点:遍历链表并跳过重复值节点 这些题目涵盖了链表操作的主要技巧,包括指针操作、快慢指针、节点复制等核心方法,是面试中的高频考点。

2025-12-06 21:44:58 591

原创 数据结构(5)链表面试题

本文介绍了5个链表相关的经典算法题解:1. 删除链表中指定值的节点(203题)- 遍历链表,删除所有值等于val的节点2. 反转链表(206题)- 提供迭代法和递归法两种解法,重点讲解三指针迭代法3. 查找链表中间节点(876题)- 使用快慢指针法高效解决问题4. 查找倒数第k个节点(剑指Offer22)- 快慢指针法,快指针先走k步5. 合并两个有序链表(21题)- 采用尾插法,并介绍哨兵位头节点的优化方法 每个问题都给出了基础解法和优化解法,特别是快慢指针技巧在多题中的应用,展示了链表问题的高效解决思路

2025-12-06 18:35:53 792

原创 数据结构(4)链表概念+单链表实现

本文介绍了链表的基本概念、结构类型及其优缺点,并提供了无头单向非循环链表的完整实现代码。链表通过指针链接实现非连续存储,常见结构包括单向/双向、带头/不带头、循环/非循环等组合。相比顺序表,链表能按需申请空间、高效插入删除,但不支持随机访问。文章详细实现了单链表的增删查改操作,包括尾插、头插、查找、指定位置插入删除等功能,并提供了完整的测试用例。实际应用中,单链表多作为复杂数据结构的子结构,而双向循环链表更适合独立存储数据。

2025-12-06 14:41:30 834

原创 数据结构与算法(3)顺序表的实现(动态顺序表+菜单)

摘要:本文详细介绍了线性表和顺序表的基本概念及实现。线性表是最基础的数据结构,包含顺序表、链表等实现形式。顺序表采用连续存储方式,分为静态和动态两种:静态顺序表使用定长数组,动态顺序表支持扩容。重点讲解了动态顺序表的实现,包括初始化、增删查改等接口函数,并通过C语言代码展示了具体实现过程。最后提供了一个完整的菜单测试程序,支持头插尾插、指定位置操作等功能,演示了顺序表的实际应用。

2025-12-06 13:29:04 679

原创 数据结构与(2)-(复杂度相关OJ)

本文介绍了五个数组相关的算法问题及其解法:1. 消失的数字:使用求和法或异或法在O(n)时间内找出缺失数字;2. 数组中数字出现的次数:通过异或分组找出两个只出现一次的数字;3. 轮转数组:采用三步旋转法实现原地旋转;4. 移除元素和删除重复项:利用快慢指针思想高效处理数组;5. 合并有序数组:从后往前比较实现原地合并。这些解法均注重时间或空间复杂度优化,展示了数组操作的常见技巧。

2025-12-05 23:06:08 528

原创 数据结构与算法(1)(第一章复杂度知识点)(大O渐进表示法)

本文介绍了数据结构与算法的基本概念及复杂度分析。数据结构是带有结构特性的数据元素集合,研究数据的逻辑与物理结构及其关系;算法是解决问题的清晰指令序列。重点讲解了算法复杂度分析,包括时间复杂度和空间复杂度,其中时间复杂度衡量运行速度,空间复杂度衡量额外内存需求。文章详细阐述了大O渐进表示法的计算规则,通过多个实例演示了不同算法的时间复杂度计算(如O(N)、O(logN)、O(2^N)等),并指出现代计算机发展中更关注时间复杂度而非空间复杂度。最后对比了常见复杂度等级,为算法性能评估提供了理论基础。

2025-12-05 21:35:50 880

空空如也

空空如也

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

TA关注的人

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