自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【与C++的邂逅】--- C++的IO流

类对应操作场景ifstream只读ofstream只写fstream可读可写注:使用文件流对象需要包含对应的头文件<fstream>在C语言中,如果想要将一个整形变量的数据转化为字符串格式,主要有两种方式:1. 使用itoa()函数2. 使用sprintf()函数int main()return 0;注意 : 这两个函数在转化时,都得需要先给出保存结果的空间,空间大小不好界定,而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。

2024-09-18 21:41:13 1768 56

原创 【与C++的邂逅】--- string容器使用

注 : string类通过运算符重载改变了反向迭代器++和--的行为,底层是封装的正向迭代器.总结 : 迭代器一共有四种:1. iterator的const和非const版本 以及 reverse_iterator的const和非const版本.

2024-09-08 16:23:10 2184 64

原创 【位运算】--- 进阶题目赏析

由图中我们可以知道,ret最后一定是两个只出现一次的数字(记为a和b)的异或,由于异或是相同为0,相异为1,因此我们可以利用n&(-n)提取异或后的ret最右边的1,也就是a和b在这个bit位上的数字不同,依照这个不同可以将原数组中的数字划分为两种:一种是k位上是1,一种是k位上是0,由于其他数字出现了两次他们异或之后得到的一定是0,最后ret1和ret0得到的一定是只出现一次的两个数字。异或一遍原来数字再异或一遍nums,就可以得到消失两个数字的异或。本节我们来赏析位运算的一些进阶题目。

2024-09-03 13:39:40 1114 30

原创 【位运算】--- 初阶题目赏析

那是因为如果两个数某个位上的数字都是1话,就需要进位,此时按位与得到的还是1,而如果两个数中有一位是0的话按位与就是0,因此通过按位与能很好的知道那一位进位,那一位不进位。我们知道异或其中两条运算律是a^a=0和结合率,因此我们遍历一遍原来的数字,再遍历一遍缺失数组,最后得到的数就是缺失的数字,因为未缺失的在两次过程相当于出现两次,也就是会异或为0,最后只剩缺失的没有配对.利用哈希表对小写字母进行映射,如果遍历过程中出现已经映射的直接返回false,若遍历完之后都没有出现映射两次的则返回true。

2024-09-02 22:59:31 1018 32

原创 【前缀和算法】--- 进阶题目赏析

以K=4为例子,求出某个前缀和为-1,-1%K应该为3,但有的编程语言-1%K = -1(不同编程语言对商的取整是不同的,有的向0取整,有的向负无穷取整).这里的-1应该要加上K,转正成3.这是因为-1和3分别模4结果看似不相等,但是3-(-1) = 4,4%4 == 0,所以前缀和-1和3其实是等价的,只是不同语言对%运算的处理不同。这道题与"和为K的子数组"其实是类似的,我们以i位置为结尾的子数组观察,如果能找到一段右边部分能被k整除,此时问题转化成。我们哈希表此时存的不是前缀和,

2024-09-01 15:54:04 1071 26

原创 【二叉树进阶】--- 前中后序遍历非递归

当我们还面临一个问题当取到左路结点的右子树时,我们需要想办法标记判断右子树是否已经访问过了,如果访问过就直接访问根,没有访问过就访问右子树。中序是对左路结点时不能先访问,而是先依次入栈,入栈完左路结点后再访问这些左路结点,再依次访问他们各自的右子树。后序跟前序的思路也是完全一致,毕竟模拟的是递归展开过程,只不过后序是左子树-右子树-根,最后再访问根结点,也就是说要左右子树都访问完之后才能访问根并出栈。3.如果左路节点右子树不为空,右子树已经访问过,那么上一个访问节点应该是右子树的根,

2024-08-30 17:21:25 1299 19

原创 【前缀和】--- 初阶题目赏析

f[i]表示前缀和数组,即【0,i-1】区间数组的和,由此可得f[i] = f[i-1] + nums[i-1];g[i]表示后缀和数组,即【i+1,n-1】区间数组的和,由此可以得到g[i] = g[i+1] + nums[i+1].获取dp前缀和数组,dp[i]用来表示[1,i]区间内数组值之和,由于中心下标是左边区间元素之和 == 右边元素之和,中心坐标不包括在那,所以我们可以先获取前缀和数组,遍历数组,当dp[i-1](左边区间) == dp[n] - dp[i](右边区间),返回中心坐标.

2024-08-30 10:54:28 964 24

原创 【Python】--- 基础语法(上)

a = 10上述代码a为变量名,当我们创建多个变量时,就可以用名字来进行区分。定义变量时不用声明类型。注释是一种特殊的代码它不会影响到程序的执行但是能够起到解释说明的作用能够帮助程序猿理解程序代码的执行逻辑。

2024-08-29 11:43:11 1875 9

原创 【与C++的邂逅】--- 模板初阶

class 类模板名///...注意:类模板中函数放在类外进行定义时,需要加模板参数列表。public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();if(_pData)模板分为函数模板和类模板,他们不是具体的一个类或函数,而是代表一个家族。类模板 vs 模板类类模板是一个类家族,而模板类是通过类模板实例化出来的具体类。

2024-08-27 15:17:22 1515 42

原创 【与C++的邂逅】--- C/C++内存管理

如果用malloc申请一个自定义类型元素的空间,此时它的成员变量是没有进行初始化的。delete p2;delete p3;用new申请自定义类型空间时,此时会new完成的任务是申请空间分配地址+调用默认构造函数。当然你也可以显示调用其他构造。而delete完成的任务是先调用析构清理资源,再释放内存空间。//调用10次构造//调用10次析构。

2024-08-26 15:46:41 2018 38

原创 【与C++的邂逅】--- 类与对象(下)

(毕竟类只能在定义的时候构造).

2024-08-23 21:44:57 2110 28

原创 【与C++的邂逅】--- 类和对象(中)

构造函数,则C++编译器。

2024-08-22 14:49:07 1736 34

原创 【前缀和算法】--- 一维和二维前缀和模板

任取一块区域,假设D为(i,j)点,若我们要求dp[i][j]也就是求(1,1)到(i,j)区域的和,我们可以将这四部分相加,由于B和C不好求,我们可以利用A(dp[i-1][j-1])来间接求这两部分,但是不要忘记减去多进来的A。我们前缀和数组下标是从1开始的,如果下标从0开始,当求[0,2]区间的值之和时就转化成dp[2] - dp[-1]这个dp[-1]是个边界情况需要我们特殊处理且。我们发现,比如dp[3]是【1,3】区间值的和,那么就相当于是【1,2】区间的和+arr[3].2.使用前缀和数组。

2024-08-20 21:43:43 1156 32

原创 【二分查找】--- 进阶题目赏析

二分过程:参考代码:🏠 寻找旋转排序数组中的最小值📌 题目内容二分流程:参考代码:思考:我们划分两端区间是以D为参考点,那么我们是否能以A为参考点呢?🏠 0~n-1中缺失的数字📒 思路二:直接遍历找结果📒 思路三:位运算📒 思路四:高斯求和公式📒 思路五:二分查找前面的思路都很简单,但时间复杂度都是O(N)。仔细观察我们发现因为缺失了数字,会造成二段性。参考代码:

2024-08-19 22:09:49 1576 26

原创 【与C++的邂逅】--- 类和对象(上)

比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数。

2024-08-18 13:32:22 2189 30

原创 【二分查找】--- 初阶题目赏析

数组为一个升序数组。与经典的二分查找不同的是,如果找不到目标值啧应该返回它应该在数组中被插入的位置。参考代码:🏠 x的平方根📌 题目内容📌 题目解析 对于平方根不是整数的相当于是向下取整本题数据范围为 0 <= x <= 2^31 -1,用int可能会溢出,因为会有平方的操作。参考代码:

2024-08-17 21:35:47 1667 16

原创 【二分查找】--- 二分模板总结

/也可以是left+(right-left+1)/2;注:...表示具体问题具体分析。查找左边界总结:本博客我们讲解了朴素二分模板以及边界二分模板,朴素二分模板应用比较局限,而对于边界二分模板我们更常用.对于边界二分模板,我们要处理好它的循环条件以及求中点,同时根据我们求的左端点还是右端点来更新left和right.

2024-08-16 13:21:24 1403 27

原创 【二叉树进阶】--- 二叉搜索树转双向链表 && 最近公共祖先

不同的是,我们需要记录前驱节点prev,ptail->next = node,此时的node就是我们中序遍历的当前访问节点,此时ptail需要更新成node(当前访问节点),prev就是上一个按中序被访问节点,所以我们需要在更新ptail之前记录prev,同时更新好前驱和后继指针的指向。归根结底,找公共祖先也就是找公共节点,如果我们能求出两个节点的祖先路径,就能转化为链表相交问题了。题目要求链表中的节点是排好序的,因此结合二叉搜索树的性质(二叉搜索树中序遍历出来是有序的),我们可以。

2024-08-14 21:25:09 1825 23

原创 【二叉树进阶】--- 根据二叉树创建字符串

假设有颗满二叉树,当根结点入队时顺便此时他的左右结点也顺便入队,此时队列中结点的个数就是2,此时这两个结点对应层数就是2;类似地当第二层的两结点一父带两娃时,此时入队了4个结点,这一层也是有4个结点。1.了解思路一后,我们发现思路一维护每个结点的层数比较麻烦,我们能否另寻他路,一口气把每层的结点push进数组里?4.为了效率,我们可以先计算总的高度,提前开好二维数组所需要的层数;.我们按上面流程得到的是从上到下的层序遍历,从下往上我们可以使用。的思想(即一个父亲入队的时候,它的两个孩子也一起入队)实现。

2024-08-14 21:25:01 1508 14

原创 C++威力强大的助手 --- const

如果只有指针(而非所指向内容)隶属于对象,(比如有这样的一个类,将数据存储于char*而不是string),不修改char*而修改char*指向内容,此时编译器是认为是bitwise constness的,可以正常通过编译。

2024-08-05 14:07:53 1705 37

原创 【外排序】--- 文件归并排序的实现

外排序(External sorting)是指能够处理极⼤量数据的排序算法。外排序通常采⽤的是⼀种“排序-归并”的策略。在排序阶段,先读入能放在内存中的数据量,将其排序输出到⼀个临时文件,依此进行,将待排序数据组织为多个有序的临时文件。然后在归并阶段将这些临时文件组合为⼀个大的有序文件,也即排序结果。注意:1. 通常来说,外排序处理的数据不能一次性装入内存,只能放在读写较慢的外存储器(通常是硬盘上)。2. 我们之前常见的排序是内排,它们排序思想适应的是数据在内存中支持随机访问。

2024-08-03 21:24:14 1405 34

原创 字符串匹配 --- BF算法 && KMP算法

对于此时不匹配我们能提取到的一个信息是你其实知道前面六个字符是"ABCDAB",因此我们可以利用这个信息找到最大程度能匹配子串的一部分,此时就是最好的情况这便是KMP算法的核心 --- 利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。与BF算法不同的是,当匹配失败时,主串时不回退的,子串回退到相应位置。问题是KMP算法中,当匹配失败时,子串怎么知道该回退到哪个位置?

2024-06-26 20:12:37 898 35

原创 [双指针] --- 快乐数 && 盛最多水的容器

结合我们发现的规律以及对撞指针的原理,我们的。

2024-05-29 22:49:14 2619 48

原创 【双指针算法】--- 移动零 && 复写零

注意点:1.在找0时,如果遇到类似【1,2,3】这样的例子,可能会越界,所以我们需要加上一个限制条件2.在复写时,如果插入0的位置合法,我们正常插入;如果不合法(比如 【1 2 3 4 0】),我们仍然需要更新cur指针使它遍历完数组。

2024-05-22 22:44:09 1212 55

原创 【数据结构】--- 深入剖析二叉树(中篇)--- 认识堆&&堆排序&&Topk

文章目录🏠 初识堆📒 堆的概念📒 堆的性质🏠 向上调整算法 && 向下调整算法📒 向上调整算法📒 向下调整算法📒 向上调整 vs 向下调整🏠 堆的应用场景📒 堆排序📒 Top K问题 我们知道二叉树的顺序结构适合于完全二叉树和满二叉树,而我们今天的主角堆也是个完全二叉树,因此它也是使用顺序结构的数组来存储⚠️对于这样的一个小堆,我们要插入2这个数据,此时不满足小堆的要求,若要调整可能会影响祖先,那有什么方法能解决这个问题呢?这里就要介绍一个新的算法 --- 向上调整算法我们先上个

2024-05-06 22:56:02 1483 64

原创 【数据结构】--- 深入剖析二叉树(上篇)--- 初识树和二叉树

⚠️ 1.子树不能有交集2.除了根结点外,每个结点只能有一个父亲3.一颗N个结点的树有N-1条边以下的都是子树有交集的,不能叫做树4.树中不能有环,

2024-05-05 11:05:28 1601 96

原创 【数据结构】--- 探索栈和队列的奥秘

关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა上回我们学习了顺序表和链表,今天博主来讲解两个新的数据结构 — 栈和队列 , 请放心食用。

2024-04-05 22:27:27 1443 69

原创 【与C++的邂逅之旅】--- 内联函数 && auto关键字 && 基于范围的for循环 && nullptr

这个函数不陌生吧,我们在实现排序算法时经常要用,可你是否想到 一个问题,但我们排序的数据量较大时,我们会反复调用这个函数,不断创建函数栈帧,这会是一笔不小的开销,那有什么方法解决呢?那C++中是否有更好的解决方法呢?这里就来介绍我们的内联函数我们转到反汇编观察下细节可以观察到,如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用那 debug 版本下,怎么设置呢?请看下图inline是一种的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换

2024-04-04 23:19:43 1208 48

原创 【与C++的邂逅】---- 函数重载与引用

关注小庄 顿顿解馋(`▿´)喜欢的小伙伴可以多多支持小庄的文章哦📒📒引言 : 上一篇博客我们了解了C++入门语法的一部分,今天我们来了解函数重载,引用的技术,请放心食用 ~

2024-04-02 22:07:52 1657 50

原创 【C++入门】 初见,单推,与C++的第一次约会

语法namespace 空间名// 定义变量} //定义函数//定义类型} //注意这里没有分号!!命名空间里可以定义变量,函数,类型int a;int b;int c;int d;命名空间也可以嵌套命名空间,有什么使用场景呢?int x;如上代码 当你想用两个同名命名空间里的东西时,就可以嵌套命名空间。

2024-03-27 23:16:28 1423 72

原创 【数据结构】双向奔赴的爱恋 --- 双向链表

在这里我们讲的双链表有三个特点 :双向 , 循环 , 带头。我们分别理解这三个特点~双向 循环优势:1.每一个结点都能很方便访问它的后一个结点和前一个结点 2.方便找到尾节点,提高了效率。带头图中的head就是哨兵位这里的带头跟我们之前所说的头节点有所不同,这里的带头,不存储有效数据起到一个哨兵的作用。遍历循环链表避免死循环,其次涉及到头节点的删除和插入时,无需考虑NULL的问题。双链表的这三个特点将会使得实现它比实现单链表更简单~

2024-03-26 22:03:01 1254 47

原创 【数据结构】单链表的层层实现!! !

关注小庄 顿顿解馋(●’◡’●)上篇回顾我们上篇学习了本质为数组的数据结构—顺序表,顺序表支持下标随机访问而且高速缓存命中率高,然而可能造成空间的浪费,同时增加数据时多次移动会造成效率低下,那有什么解决之法呢?这就得引入我们链表这种数据结构。

2024-03-08 23:14:02 1570 80

原创 【数据结构】顺序表实现的层层分析!!

线性表是n个有相同特性数据元素的有限序列,是一种广泛使用的数据结构,常用的数据结构有链表,顺序表,队列和栈等线性表在逻辑结构上是线性的(一条连续的直线),但在物理结构不一定连续。比如我们在排队时,我们脑海中认为我们队伍应该是排成一条直线的,实际上也应该如此,这里就是类似我们待会要讲的顺序表,但有有时不免有人会插队三五成群排在队伍左右边,类似我们线性表中的链表。

2024-02-23 13:09:02 2455 75

原创 【C语言的小角落】逻辑与逻辑或混合计算

跟之前分析一样表达式等价于(x==0 && ++y) || ++ z ,转化为xxx || xxx ,左边括起来的部分由于x不为1直接短路所以右边的++y不计算,故左边的xxx就是0,由于逻辑或短路特性,继续计算++y。x == 1 || (++y && ++ z) ,也就是说 || 左边是一个整体 右边括号括起来的是一个整体,由于左边部分表达式为true,所以整个表达式短路右边括号括起来的部分直接就不计算了。有的小伙伴可能会疑惑这里的&&不是优先级比| |高,z和y不是都该加1?

2024-02-20 11:48:57 811 61

原创 【C语言】简单贪吃蛇实现保姆级教学!!!

我们发现应用程序会有开启视窗、描绘图形、使⽤周边设备等操作,那这是怎么实现的呢?那就是通过我们。

2024-02-16 15:04:09 1302 46

原创 那些年与指针的爱恨情仇(二)---二级指针&&指针与数组的那点事&&函数指针

关注小庄 顿顿解馋(。・∀・)ノ゙欢迎回到我们的大型纪录片《那些年与指针的爱恨情仇》,在本篇博客中我们将继续了解指针的小秘密:二级指针,指针与数组的关系以及函数指针。请放心食用!

2024-01-30 12:17:06 1558 87

原创 那些年与指针的爱恨情仇(一)---- 指针本质及其相关性质用法

关注小庄 顿顿解馋 (≧∇≦)引言: 小伙伴们在学习c语言过程中是否因为指针而困扰,指针简直就像是小说女主,它逃咱追,我们插翅难飞…本篇文章让博主为你打理打理指针这个傲娇鬼吧~本节我们将认识到指针本质,何为指针和她的性质用法,请放心食用!

2024-01-27 12:08:38 2282 49

原创 c语言 编译与链接

接下来让博主对翻译环境进行详细讲解´༥`翻译环境是如何将源代码转换成二进制指令呢?其实翻译环境由编译和链接两大板块组成;而编译又细分为预处理(预编译),编译,汇编三个阶段૮(˶ᵔ ᵕ ᵔ˶)ა一个项目由多个源文件构成,这些源文件经过编译阶段和编译器(cl.exe)处理生成对应的目标文件,接着对应的目标文件在链接阶段经过连接器(link.exe)生成对应的可执行程序xx.exe文件,这就是大致的翻译环境的流程。接下来我们先来了解翻译环境所拆分的三个阶段(以linux环境gcc编译器为例)注:对于.i和.s

2024-01-17 16:40:36 1546 63

原创 c语言 文件与文件操作

磁盘上的文件就是文件,可以理解为一个信息集合体。我们一般根据文件的功能将其分为两类:一类是程序文件,一类是数据文件。

2023-12-17 22:54:23 230 21

原创 c语言【自定义类型上】结构体

在前面我们学了int , char , float等数据类型,这些属于内置数据类型,如果我们想一次性使用多个类型,比如我们生活中登记某个人的信息,一个数据类型是不够的,这时候就可以使用我们的自定义类型。

2023-12-04 23:01:59 145 11

空空如也

空空如也

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

TA关注的人

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