自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 相关二叉树进阶面试题的讲解?看这一篇足矣

【代码】相关二叉树进阶面试题的讲解?看这一篇足矣。

2024-09-06 22:08:30 252

原创 C++避坑小知识

引子:本文仅仅用作检查小错误,可以是一篇专辑

2024-08-29 13:22:09 1130 1

原创 特殊类设计(5个)与类型转换

引子:在生活中我们经常有不同类的需求,因此我们有了特殊类的设计(有很多种模式等)。由于类型需求不同我们有了类型转换。今天我们就来略讲略讲一下这方面的知识。特殊类设计(5个)注意:关键字:explicit--防止隐式类型转换,final--该类不能被继承一,设计一个类,不能被拷贝思路:直接使用c++11新增知识delete,禁掉拷贝构造与赋值,或放到私有private中区,只声明不实现。

2024-08-28 11:53:43 870

原创 c++异常处理(c++11版)与智能指针 SmartPtr 的应用(主讲shared_ptr浅实现)

引子:找C语言的异常时,你是否会被奇怪的错误码或程序终止报错而感到无奈,对找不到错误在哪的心烦?在害怕内存泄漏时,你是否每一步,每一句代码都要仔细分析,在用完之后进行资源空间的释放?你是否......,今天我们讲的c++异常处理(c++11版)与智能指针的应用(主讲shared_ptr浅实现),希望可以帮助你

2024-08-27 12:59:30 851

原创 可变参数模板与包装器

。抱歉:铁汁们,最近在做兼职,积累社会经验,多有拖欠,请多多包涵(抱拳)引子:接上回我们讲了C++11的几种新增,今天就来接着讲C++11中比较有用的二个东西可变参数模板与包装器。可变参数模板:当我们进行cout来打印时或cin来进行输入时,我们发现我们打印使用任意数量好任意数量类型的东西,你是否会思考为什么呢?其实都是可变参数模板的功劳,那何为可变参数模板呢?

2024-08-21 23:36:01 829

原创 C++11中的左右值引用(略带复习)

引子:我们在之前学过,auto(底层为迭代器),范围for,{}初始化(可以省略=),initializer_list,decltype,nullptr(Null字面上为0),arrray(与数组相比,对于出错的处理不同),forward_list(与普通的相比少一点空间),还学过unordered_map与unordered_set(底层为哈希表,详见我前一篇封装)新容器等内容,这些其实是C++11新增的内容,今天我们就来讲一讲另一个C++11的内容——左右值的引用!

2024-08-17 12:36:07 814

原创 异曲同工之妙,哈希封装的set与map(包含测试代码)

话不多说我们直接上代码,请君自行测试。

2024-08-15 20:21:51 769 1

原创 (小白易通)判断极大数据中一个数是否存在的唯一真神,哈希--位图

是一种使用位图(Bitmap)来存储哈希表中元素存在性的数据结构。位图是一种数据结构,它使用位数组来表示数据,每个位代表一个元素的存在或不存在。在哈希位图中,哈希函数被用来将键映射到位图中的一个位上。如果该位为1,则表示对应的键存在,如果为0,则表示不存在。C/C++没有对应位的类型,只能看int/char这样整形类型,我们再通过位运算去 控制对应的⽐特位。⽐如我们数据存到vector中,相当于每个int值映射对应的32个值。

2024-08-10 23:01:23 377

原创 哈希初步结构:闭散列与开散列(代码部分)

ht.insert({ "sort", "排序" });ht.insert({ "left", "左边" });ht.insert({ "sort", "排序" });ht.insert({ "left", "左边" });//在原有的数据里面已经有这个了,要确保唯一性。//负载因子为1时进行扩容。//即size与数据点相等。

2024-08-10 15:36:44 976

原创 略谈set与map的pair封装与进入哈希

一,哈希是一种数学函数,它接受一个输入(或“消息”),然后返回一个通常更小的固定大小的输出,这个输出称为“哈希值”或“哈希码”。映射:哈希思想通过哈希函数将任意长度的数据映射到固定长度的哈希值。这个映射过程是单向的,即从数据到哈希值是容易的,但从哈希值回溯到原始数据几乎是不可能的。快速性:哈希函数的设计旨在快速计算,以便在大数据集中实现高效的数据访问。均匀分布:理想情况下,哈希函数应该能够将输入数据均匀地分布在哈希值空间中,以减少冲突并提高查找效率。

2024-08-09 14:28:19 1263 1

原创 红与黑之歌,map与set的底层----红黑树(自实现)

我们在学习avl搜索二叉树时,知道avl是高度差不超过1的,因此是“绝对平衡的”,那有没有一种“接近平衡”的树呢?让它在这方面轻松一点,更加高效一点?答案是有的,set与map的底层就给出了答案--红黑树,红黑树是一种自平衡的二叉搜索树,它在计算机科学中被广泛使用,特别是在需要频繁插入和删除操作的数据结构中。红黑树的名称来源于它的节点颜色,可以是红色或黑色。这种数据结构能够保证在任何情况下,从根到叶子的最长路径不会超过最短路径的两倍长。

2024-08-08 14:55:06 1135

原创 avl树自实现(带图),探讨平衡因子与旋转

AVL树是一种自平衡的二叉搜索树,它的名字来源于它的发明者Adelson-Velsky和Landis。AVL树的特点是任何节点的两个子树的高度(或深度)最大差异为1。这种平衡特性确保了树的查找、插入和删除操作都能在对数时间内完成,即时间复杂度为O(log n)。当向二叉搜索树中插入新结点后,如果能保证每个结点的左右 子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均 搜索长度。

2024-08-05 14:49:49 587

原创 要 set 还是 map? 我全要

总的来说有以下几点:元素唯一性:set中的每个元素都是唯一的,不允许重复。如果尝试添加一个已经存在的元素,大多数情况下,这个操作会被忽略。无序性:虽然你提到了"按照一定次序存储元素",但实际上大多数编程语言中的set并不保证元素的存储顺序。它们通常不按照元素的添加顺序或任何特定的顺序来存储元素。元素作为键:在某些编程语言中,如C++的std::set,元素既是键也是值,因为set是基于键值对的集合,但键和值是相同的。不可修改性:set中的元素通常是不可修改的,即一旦元素被添加到set中,就不能更改它的值。

2024-08-03 15:43:15 832

原创 震惊,搜索二叉树告诉我们不要生二胎?本篇(带图)让你轻松拿下

set的底层实现通常依赖于哈希表(Hash Table)或平衡二叉搜索树(如红黑树)。以下是两种常见的实现方式有序性:对于树中的每个节点,其左子树上的所有节点的值都小于该节点的值,其右子树上的所有节点的值都大于该节点的值。唯一性:树中没有重复的节点。

2024-07-20 15:46:22 669 3

原创 接上一回C++:补继承漏洞+多态原理(带图详解)

菱形继承:菱形继承是多继承的一种特殊情况。菱形继承有数据冗余和二义性的问题如下图:西红柿,里面就有二个植物的属性,这与我们常识不符。

2024-07-11 20:21:07 826 1

原创 优选算法之技巧(一):双指针一:移位0与复写0

当current当前是非0元素,即desteration++,然后让current与desteration所指向的原素进行交换,current++desteration是指最后一个非0元素,起始位置在第一个元素前一个,即下表-1;current起到遍历作用,从左向右,起始位置在第一个元素,即下标0;,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。当current当前是0元素,即current++;移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。

2024-07-07 23:35:41 912 2

原创 My Greedy Algorithm(贪心算法)之路(一)

我愿称贪心算法为贪婪+鼠目寸光,贪心算法(Greedy Algorithm)是把求解的问题分成若干个子问题,在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法并不保证总能找到全局最优解,但在许多情况下,它能够产生很好的结果,并且实现简单,效率高,所以是“希望”得到最优解!

2024-07-06 22:43:32 1058 2

原创 vector的自实现(迭代器失效问题)与继承续讲

删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代 器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是 没有元素的,那么pos就失效了。比如:resize、reserve、insert、assign、 push_back等,也就是说vector底层原理旧空间被释放掉, 而在打印时,it还使用的是释放之间的旧空间,在对it迭代器操作时,实际操作的是一块已经被释放的 空间,而引起代码运行时崩溃。// 指向有效数据的尾。

2024-06-27 18:14:12 810

原创 名侦探李先生第一话:谁是真正的凶手(只出现一次的数字相关题解(力扣)+位操作符回忆)

逗号表达式:从左向右依次执行,整个表达式是最后一个表达式的结果!说明a的二进制最低位是1;说明a的二进制最低位是0;按位或|:只要友谊就位1,全为0才为0;按位与&:有0就为0,全1才为1;按位异或^:相同为0,不相同为1;左移:逻辑右移和算数右移。按位取反~:1为0,0为1;正整数原,反,补码都相同。原码也可以用补码+1表示。

2024-06-24 23:02:43 958 1

原创 easyx之图形库复习--自制写轮眼的图形绘制

EasyX 是针对C/C++的图形库,可以帮助使用C/C++语言的程序员快速上手图形和游戏编程。比如,可以用 VC + EasyX 很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等。个人认为有点像api,web前段等功能。

2024-06-21 16:30:44 975

原创 deque的知识+每日一题:栈的压入,弹出序列+

栈是一个“后进先出”或“先进后出”的顺序存储结构。入栈的顺序规律是排在前面的先进,排在后面的后进。出栈的顺序规律是排在前面的先出,排在后面的后出。

2024-06-20 22:33:27 736

原创 c++模板,特化,仿函数,继承(复习专用)

c++模板,特化,仿函数,继承(复习专用)

2024-06-17 17:02:57 624 2

原创 那些年我与c++的叫板(一)--string类自实现

/注意char * strcpy ( char * destination, const char * source );//为深拷贝,因为如果浅拷贝的话,共用一块空间,那结果可想而知。//只析构_str上的资源。//注意pos=0时,对应的值为size_t类型,要int转。if (this!= &s)//排除等于自身的情况。// len大于前面字符个数时,有多少删多少。// len大于后面剩余字符,有多少取多少。//本string简单实现,代码量小,故直接写在声明中。//拷贝构造,可以隐式类型赋值。

2024-05-15 22:50:44 804 1

原创 邂逅Linux--常见指令,万物为文件(一)

类UNIX-r:用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项。-i:在复制前提示确认,如果目标文件已存在,则会询问是否覆盖,回答 y 时目标文件将被覆盖。。-u:仅复制源文件中更新时间较新的文件。

2024-05-11 19:19:53 979 4

原创 那些年我与c++的交友日记(初识三):string类的(详细)常用函数与补充三种string遍历方式

(只可意会不可言传啊,苦笑)

2024-05-04 00:18:35 657 4

原创 那些年,我与c++的交友日记(初识二):(保姆级教学)三大重要默认函数与栈的实例(c++的受益者)

注意:一个类只有一个构造函数与析构函数,任何说有二个构造函数或二个析构函数都是错的!我总结以下几个原则!1,构造顺序是按照语句的顺序进行构造,析构是按照构造的相反顺序进行析构!2,对象析构要在生存作用域结束的时候才进行析构!3:类的析构函数调用一般按照构造函数调用的相反顺序进行调用,但是要注意static对象的存在, 因为static改变了对象的生存作用域,需要等待程序结束时才会析构释放对象!4,全局对象先于局部对象进行构造,局部对象按照出现的顺序进行构造,无论是否为static!

2024-04-11 23:33:11 815 4

原创 那些年,我与c++的交友日记(初识)一:找素数

C++是C语言的超集,因此C语言的代码在C++中通常可以编译和运行。C语言虽然简洁、紧凑,但标准库相对较少,主要集中于算法和程序流程,而不包括图形处理。C++提供了更丰富的数据结构和语法特性,如引用、异常处理等,而C语言则相对简单。C++拥有更丰富的标准库,包括更高级的数据结构和算法,以及更好的图形处理支持。C++允许在结构中定义成员函数,而C语言中的结构体只有成员变量,没有成员方法。C语言则是一种面向过程的编程语言,主要关注于算法和程序流程,而不是对象和类。cout

2024-04-08 17:04:49 911 3

原创 c++支持重载函数而c不支持,在翻译环境中的解释

包括:1,处理以# 开头的指令 , 比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。1,预定符号,_ _FIEL_ _路径,_ _DATE_ _日期,_ _TIME_ _时间 _ _LINE_ _行号。如上,就是重载了,在c中是不支持的,在c++支持!

2024-04-01 18:14:07 951 2

原创 离散数学--谓词逻辑之复习与前束范式与谓词演算的推理理论

(口vi)A,其中可能是量词或量词3, vi(i=1,2,…,n)是客体变元,A是没有量词的谓词公式。一个公式,如果量词均非否定地在全式的开头,它们的作用域延伸到整个公式的末尾,则称此公式叫前束范式。证明: 首先利用量词转化公式,把否定深入到命题变元和谓词填式的前面,其次利用。前束析取范式:前束范式中量词后的括号内是析取范式形式.前束合取范式:前束范式中量词后的括号内是合取范式形式.任意一个谓词公式,均和一个前束范式等价。如果对个体域中某个特定客体c,有。成立,则在个体域中,必存在。这样便得到前束范式。

2024-04-01 00:13:42 1298 2

原创 离散数学之范式方法

析取范式,极小项概念:?与给定命题公式等价的一个公式,如果是由基本积之和组成,则称它为命题公式的析取范式对给定的命题公式来讲,仅含有极小项的析取的等价式称为给定命题公式的主析取范式。在n个变元的基本积中,若每个变元及其否定并不同时存在,且二者之一出现一次且仅出现一次,则称此基本积为极小项在真值表中,一个公式的真值为T的指派所对应的极小项的析取,即为此公式的主析取范式。方法:1,真值表法 (注意有三个以上的变元,不建议使用) 2 ,等价公式法AS:求¬(P∧Q)的主析取范式合取范式。

2024-03-23 18:58:53 1168 3

原创 插入排序的优化--希尔排序(数量级到顶时,有时竟然比堆排序快!)

今天,我们来讲一下希尔排序!

2024-03-21 13:27:43 1770 6

原创 二叉树的遍历(前,中,后,层序遍历)

前序是“根左右”中序是“左根右”后序是“左右根”层序是“一层一层,从上到下”注意:前序有许有多种情况,但是可能是一样的排序,包括中后一样!图解:如下是一个数的前中后序层序遍历:代码实现:首先,我们先创建一个树:(在这里我简单给个数组来存储一个数上的节点数据)铁汁们,你想要那个就用哪个!我用char好了,Int比较常见!ok,我们输入数据;共有代码!// 二叉树前序遍历return;

2024-03-18 15:50:15 844 1

原创 离散数学之命题逻辑一

命题公式可按下述法则来生成:1)孤立的命题变元是一个命题公式。2)若A是命题公式,¬A也为命题公式。3)若A、B是命题公式,则(AΛB)、(A∨B)、(A→B)、(A↔B)均为命题公式.3,定义:命题公式A在其所有可能的赋值下取得的值列成的表称为A的真值表。

2024-03-14 23:25:35 946 2

原创 百亿位富豪的苦脑,Top-k问题求解

情景引入:假如你处在的世界有百亿个富豪,你是这个世界一位富豪,想知道百亿个富豪中最富有的前10位!因为大根堆只能找到最大的那一个!(铁汁们可以自己思考一下!然后,我们用向上调整法建小根堆,在fscanf读取,直到找到最大的那一个数!printf("最大前black数据为!printf("请输入你要找的前几个数!哈哈,你请了一位大师,它就是对排序中的Topk!注意大家不要想我一样写那么那么大的数,哈哈哈哈哈。//创建前black个数据组成的小堆。今天,就简单简单分享一下吧!我们要改变其中几个值,以方便检查!

2024-03-12 22:29:51 893 5

原创 堆排序--向上向下调整创建堆方法的复杂度(数学错位相减法)以及大堆升序和小堆降序二种方式

那我们来用数学的角度来分析一下他们的复杂度!注意:时间复杂度是从最坏的情况来看的!要对二叉树的性质有了解!首先,我们从向上创建堆的角度来看(我愿意称为多乘多)如图,是一个树形结构;ok,老铁我们来看。我们把总节点数记为N; h为树的层数(把根节点记作为第一层); F(h)为该种创建方法下最坏要进行交换的次数!注意:第二层要交换的次数为1次,第三层交换次数为2次,.......第h层要交换的次数为h-1次所以我们写出, F(h)=2^1*1 + 2^2*2 + 2^3*3 + 2^4*4 + 2^5*

2024-03-11 00:01:53 1685 7

原创 独特好解之排序方法--简单基础堆排序

相信数组大家都不陌生,我们再学习栈的时候,就是通过数组来实现的,我们创建的结构体,数组指针,以及入栈(扩容),出栈(空间是否为1的分情况讨论)等操作其实在堆排序中也能遇到!完全二叉树:深度为k,有n个节点的二叉树当且仅当其每一个节点都与深度为k的满二叉树中编号从1到n的节点一一对应时,称为完全二叉树。满二叉树:如果一棵二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层上,则这棵二叉树为满二叉树。节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;(以我们push(5)为例)

2024-03-09 00:06:10 1888 3

原创 每日一题:巧妙的循环队列

2,数组比较简单,代码量小 3,用front,rear 比链表更有实现性!日复一日,我们知识慢慢增长,如今我们学过很多循环,有单向循环链表,双向循环链表等,似乎“循环”以及在外面心中不在陌生,今天我要分享的是循环队列;我们略微思考一下,我们push四个数字,为push(1),push(2),push(3),push(4),看一下效果!

2024-03-07 00:04:25 881 5

原创 每日一题之零钱兑换--完全背包问题

完全背包问题有一个很简单有效的优化,是这样的:若两件物品i、j满足c<=c[j]且w>=w[j],则将物品j去掉,不用考虑。这个优化的正确性显然:任何情况下都可将价值小体积高的j换成物美价廉的i,得到至少不会更差的方案。:虽然随着时代发展,现在我们都用支付宝,微信等进行支付,但我相信大家都有过用现金付钱的时候,当时你是否思考如何快速找出最优方法(我们假设你每种货币类型都有无限个)(你是亿万富豪),其实这是一个编程问题--我们假设我们货币有以下几种类型:1元,5元,10元,20元,50元,100元(

2024-03-05 23:54:26 934 1

原创 环形链表中的环判断(快慢指针版)与(缘分)

我们要分奇偶数讨论,当N为偶数时,为0时追上了,当N为奇数时,就为-1了,我们设环度为C,-1意味着他们之间的距变成了C-1,进入了新一轮循环;slow走一步,fast走二步为例。fast先进环,过一会,slow也进环,假设此时slow与fast之间距离为N,则每追一次,距离减少一,那当距离为0时,则追上了。那在这种情况下,如果c-1为偶数时,则fast还可以追上slow, 但是 c-1为奇数时,则fast不可以追上slow,什么事带环的链表,简单来说就是成一个循环的链表,但又不是双向链表,如图。

2024-02-04 13:08:24 451 3

原创 c语言----单向链表的前后置换

如我们所知,置换是我们常见的一个问题,如何进行高效的交换一直是我们津津乐道的一个话题。方法一:创建一个新的链表来进行逆向输出----二指针!这也是我们容易想到的一个方法!希望大家多多支持,有第三种方法的道友以及想与我一起探讨的可以关注我,更多精彩;我来展示一下代码,我们手动输入,然后进行调用一个自编函数输出逆向的链表!按所属类别来看,今天我们的链表属于单向不循环不带头类链表。首先,我们先写一个二种方法都公用的一部分,即节点的创建与输入!所以,我们要注意的是:我们不能找尾节点的指针来逆向遍历!

2024-01-28 21:04:16 466 5

空空如也

空空如也

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

TA关注的人

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