自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一道数学题

【代码】一道数学题。

2025-06-11 15:37:57 15

原创 dfs模板,主播感觉顿悟了

【代码】dfs模板,主播感觉顿悟了。

2025-06-05 14:34:14 171

原创 分享一道dfs+字符串的题目

【代码】分享一道dfs+字符串的题目。

2025-06-04 15:21:44 122

原创 判断链表是否有环,有环的话返回第一个入环结点

当然哈希表也可以,下面是哈希表的解法。

2025-05-29 21:30:57 231

原创 一道看似简单但很有趣的二叉树的dfs题

【代码】一道看似简单但很有趣的二叉树的dfs题。

2025-05-25 21:33:55 67

原创 力扣周赛置换环的应用,最少交换次数

置换环是排列组合中的一个概念,用于描述数组元素的重排过程。当我们需要将一个数组转换为另一个数组时,可以把这个转换过程分解为若干个 “环”。每个环代表一组元素的循环交换路径。假设原数组,目标数组(即按升序排序)。我们需要将A转换为B1.原数组A[0]=3,在目标数组B中应该位于索引(值为 3 的位置。2.原数组A[2]=1,在目标数组B中应该位于索引(值为 1 的位置。,对应的值为原数组A[1]=2和A[3]=4已经在正确位置,各自形成长度为 1 的环。

2025-05-21 21:32:33 349

原创 分享几道二维数组有意思的题目

【代码】分享几道二维数组有意思的题目。

2025-05-05 16:22:01 131

原创 c++重载运算符,写++函数

【代码】c++重载运算符,写++函数。

2025-04-15 16:09:34 104

原创 01背包问题

dp[i][j]:前i个物品在容量为j的背包中的最大价值。

2025-04-10 16:27:29 178

原创 A+B高精度

【代码】A+B高精度。

2025-04-09 18:47:49 122

原创 排序算法大全

【代码】排序算法大全。

2025-03-30 15:59:03 257

原创 堆排序,基于大根堆的递增排序

【代码】堆排序,基于大根堆的递增排序。

2025-03-28 21:18:04 105

原创 洛谷二分查找提高组 p2678 跳石头

【代码】洛谷二分查找提高组 p2678 跳石头。

2025-03-22 21:23:17 113

原创 二分查找 洛谷p1873

【代码】二分查找 洛谷p1873。

2025-03-20 22:44:36 118

原创 二分查找 原题在洛谷p1102 A-B数对

【代码】二分查找 原题在洛谷p1102 A-B数对。

2025-03-20 21:53:12 96

原创 洛谷P1162 填涂颜色 dfs算法题

由数字 0 组成的方阵中,有一任意形状的由数字 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2。如果从某个 0 出发,只向上下左右 4 个方向移动且仅经过其他 0 的情况下,无法到达方阵的边界,就认为这个 0。闭合圈不一定是环形的,可以是任意形状,但保证。的 0 是连通的(两两之间可以相互到达)。

2025-03-16 14:46:51 230

原创 图的邻接矩阵法,广度优先遍历,dfs

/假设y是x的邻接点,返回除y之外顶点x的下一个顶点号。//在图G中给x,y添加一条边。//求图中顶点x的第一个邻接点。//删除图G中x到y这条边。//获取图中x到y的权值。//在图G中插入顶点x。//在图G中删除顶点x。

2025-03-15 15:08:10 281

原创 无向图的邻接矩阵法,BFS

w = NextNeighbor(G, temp, w)) {//将该节点的邻接点都入队。if (visited[w - 'A'] == 0) {//确保其没有被访问,避免出现回路。//从x开始遍历,将x压入队列。//出队并访问该节点。//该节点已经被访问。//假设y是x的邻接点,返回除y之外顶点x的下一个顶点号。//在图G中给x,y添加一条边。//求图中顶点x的第一个邻接点。//删除图G中x到y这条边。//获取图中x到y的权值。//在图G中插入顶点x。//在图G中删除顶点x。

2025-03-14 22:26:53 332

原创 并查集,find函数的压缩路径,Union函数的小树合并大树

/更新结点个数,每个根节点的数组值为连接的结点个数。printf("5的根节点是%d\n",find(S,5));printf("6的根节点是%d\n",find(S,6));printf("5的根节点是%d\n",find(S,5));printf("6的根节点是%d\n",find(S,6));//压缩路径,将k到根节点的所有结点都变为根节点的直接后继。//实现"查"的操作,查这个元素所属的根节点的下标。//用森林的双亲表示法的思想,表示并查集。//实现"并"的操作,小树并到大树里面。

2025-03-12 15:16:59 416

原创 后序线索化二叉树,并找到指定结点前驱,非递归逆序输出

if(curRoot->rtag==1){//表示右孩子被线索化,没有右孩子。if(root->ltag==0){//确保其左孩子不是线索。if(root->rtag==0){//确保其右孩子不是线索。if(q->lchild==NULL){//左子树为空,建立前驱线索。//用来判断一个结点是否有线索。//后序线索化二叉树。=NULL){//非空二叉树才能线索化。//根据后序线索二叉树找到指定结点的前驱结点。//利用后序线索二叉树,逆序输出,非递归。//后序遍历二叉树,一边遍历,一边线索化。

2025-03-08 23:05:16 410

原创 先序二叉树的线索化,并找指定结点的先序后继

/-----------------------------------------在先序线索二叉树中找到指定结点p的先序后继next----------------------------------------//-----------------------------------------在先序线索二叉树中找到指定结点p的先序后继next----------------------------------------if(root->ltag==0){//确保其左孩子不是线索。

2025-03-08 22:32:48 432

原创 中序线索化二叉树,利用线索找前驱和后继

/------------------------------------------------中序遍历二叉树,一边遍历,一边线索化-------------------------------------------------------------//ltag==1,直接返回前驱线索。if(root->ltag==0){//确保其左孩子不是线索。if(root->rtag==0){//确保其右孩子不是线索。if(q->lchild==NULL){//左子树为空,建立前驱线索。

2025-03-08 15:31:52 610

原创 二叉树的层次遍历

/若左孩子非空,将左孩子入队。//若右孩子非空,将右孩子入队。//构建一个辅助队列。//二叉树的层序遍历。

2025-03-06 14:13:06 664

原创 二叉树的链式存储(前序,中序,后序遍历)

/因为根结点的内存是在栈区,除了根节点之外的其他结点的内存是在堆区。printf("中序遍历的结果:\n");printf("前序遍历的结果:\n");printf("后序遍历的结果:\n");TNode tree;//在指定的结点中增加左孩子结点。//在指定的结点中增加右孩子结点。//用递归回收开辟的内存。

2025-03-05 17:07:33 302

原创 字符串的朴素模式匹配算法

if(sstring[i]==compare[j]){//如果匹配则继续往后面匹配。//在主串中,找到与模式串相等的字串,若找不到这样的字串,则返回-1。if(j==clen){//模式串中所有的字符都匹配成功。//朴素模式匹配算法:暴力破解,把主串中所有字串找出来,依次比较。//将模式串的下标从第一个开始。printf("请输入模式串:\n");printf("请输入主串:\n");}else{//如果不匹配。//字符串的模式匹配。

2025-02-08 14:08:43 233

原创 异或的简单介绍和应用

/如果在一个数组中,只有一个元素出现一次,其余的元素出现两次,用0去一次遍历异或数组中的每一个值,得到的便是只出现一次的那个值。printf("该数组中只出现一次的数是:%d\n",returnDiff(arr,9));//异或是一种二进制运算,相同的两个数异或为0,不同的两个数异或为1(相同为0,不同为1)printf("交换后的两个数是:a:%d b:%d\n",a,b);printf("5和5相等\n");//简单应用1:不需要额外的空间,交换两个数。//两个重要的性质 a^a=0 o^a=a。

2025-02-06 14:15:36 368

原创 三对角矩阵(带状矩阵)的压缩存储

printf("请输入一个%d行%d列的三对角(带状)矩阵:\n",size,size);//压缩后的一维数组的大小。else if(i==size-1){//最后一行只有两个元素。//根据映射关系,打印压缩存储中的数据,和原来的三对角矩阵一样的效果。//一个5行5列的矩阵。if(i==0){//第一行只有两个元素。printf("压缩存储后的打印:\n");else{//其他行都有三个元素。//压缩存储的函数,返回一个一维数组。//返回(a-b)的绝对值。//以下是一个三对角矩阵。

2025-02-06 13:41:44 325

原创 三角矩阵的压缩存储

/压缩存储的一维数组的大小。printf("请输入一个%d行%d列的三角矩阵:\n",size,size);//原本三角矩阵arr[a][b]与压缩后的一维数组下标k的关系。//几行几列的三角矩阵。//三角矩阵就是主对角线和下三角(或者上三角)存储元素,printf("压缩后的打印:\n");printf("该三角矩阵是:\n");//压缩存储的代码,将其存储到一个一维数组中。//上三角(下三角存储的是常数)

2025-02-05 23:16:29 287

原创 对称矩阵的压缩存储

define ArrSize Size*(Size+1)/2 //压缩后的一维数组的长度,只储存主对角线和下三角区域,1+2+......+size=Size*(Size+1)/2。int* condeseSave(int arr[][Size]) {//此函数用来返回压缩存储后的一维数组。#define Size 5 //宏定义,对称矩阵的行数和列数为5。//对称矩阵的压缩储存。

2025-02-05 13:35:50 380

原创 力扣题:检查括号是否匹配,栈的应用

/先判断是否栈中还存在左括号。//再判断括号是否匹配。//销毁一个栈,如果栈不为空,销毁在堆区中开辟的内存。//用结构体封装一个stack类型。//右括号就要进行一些判断。//如果是左括号,就入栈。//出栈,出栈前先判断栈是否为空。//最后看栈是否为空。//压栈,将一个元素压入栈。

2025-01-22 15:06:42 714

原创 队列的链式存储代码

/front是队头指针,用于删除元素 rear是队尾指针,用于插入元素。//将Q->front指向后面一个节点。printf("队首元素是元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);

2025-01-21 14:38:31 398

原创 队列的顺序存储代码

if ((Q->rear + 1) % maxSize == Q->rear) {//判断队列是否满。printf("元素个数:%d\n", returnLength(&Q));#define elemType char//元素类型为char。//最大容量为10;

2025-01-20 20:25:30 283

原创 栈的链式存储代码

printf("栈顶元素是%c\n",a);

2025-01-20 10:57:21 423

原创 栈的顺序存储代码

inttop;}seqStack;i++){seqStacks;i<50;i+=2){return0;

2025-01-20 10:56:06 346

原创 找一对数,排序+二分查找

/第一行输入数字n(n<=100000)表示数据规模,第二行输入n个整数,第三行输入m,在n个数中找出两个数字相加等于m。//find2函数的方法,先排序,left从数组头开始,right从数组的尾部开始,两头开始往中间找。//find1函数的方法,先排序,再遍历通过二分查找看数组中有没有m-arr[i]的值。

2024-10-25 18:13:28 444

原创 表达式计算,递归的思路,表达式本身的定义就是递归

/用op存储缓冲区第一个字符,但并不从键盘缓冲区取走。//函数cin.peek()用于从键盘缓冲区看第一个字符,但并不会取走第一个字符。while (isdigit(op))//判断op是不是数字。//从键盘缓冲区取出op的字符。//从键盘缓冲区取出op的字符。//函数cin.get()用于从键盘缓冲区读走第一个字符,会取走第一个字符。//判断还没有其他的项。//从缓冲区读走'('//从缓冲区读走')'int expression_value()//表达式。if (op == '(')//看是不是括号。

2024-10-14 19:56:05 1347

原创 经典算法题:走楼梯问题

/走n级阶梯的走法=第一次走1步,n-1级阶梯的走法+第一次走2步,n-2级阶梯的走法。printf("%d级的楼梯走法有%d种\n",n, ret);// 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?// 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。if (n == 1)//递归的终止条件。if (n == 2)//递归的终止条件。//递归的核心思想,将大问题转换为小问题。

2024-10-12 14:59:54 313

原创 N皇后问题,枚举+递归

if(QueenPos[preLine]==row||abs(cur-preLine)==abs(QueenPos[preLine]-row))//如果有皇后位于同一列或者在对角线上,break。void QueenFind(int cur)//假设第0行到第cur-1行的皇后已经摆放好,从cur行开始摆放每个皇后的位置。row++)//从当前cur行的0列开始看。//记录当前皇后的位置。//并递归调用下一行。if(preLine==cur)//如果满足。//N皇后问题 运用递归代替多重循环。

2024-09-27 14:48:42 252

原创 汉诺塔问题(递归的本质,易懂)

/大问题分解为小问题,将num-1个柱子从所在的位置移动到最终的柱子上。//大问题分解为小问题,将num-1个柱子从所在的位置移动到中转柱子上。2.小问题最后能否得到一个解决,这个叫做递归的基例,比如阶乘的例子:最后0的阶乘是1。要将n个圆盘盘从A移动到C------>将n-1个圆盘从A移动到B,再将第n个圆盘从A移动到C,最后再将n-1个圆盘从B移动到C。递归的本质:将大的问题,分解为子问题,比如10!实现递归算法最重要的两步:1.大问题如何分解为小问题(大问题与小问题的关系),这个叫做递归的链条。

2024-09-13 20:54:47 335

原创 枚举算法练习题(完美立方和生理周期)

/ 人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a3 = b3 + c3 + d3,其中a,b,c,d 大于 1, 小于等于N,且b<=c<=d。// 一个整数,即从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。

2024-09-13 20:01:46 1013

空空如也

空空如也

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

TA关注的人

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