- 博客(29)
- 收藏
- 关注
原创 只出现一次的数II
假如nums=[2,2,2,3,3,3,7,5,5,5];请你找出并返回那个只出现了一次的元素。外,其余每个元素都恰出现。通过二进制与或运算实现。
2024-09-12 21:26:32
357
原创 C++---string类常见接口
1. string是表示字符串的字符串类(感觉就像一个动态的字符数组)2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。3. string在底层实际是:basic_string模板类的别名,typedef basic_stringstring;4. 不能操作多字节或者变长字符的序列。在使用string类时,必须包含#include头文件以及using namespace std;
2024-09-10 12:45:26
961
原创 C++---内存管理
栈区:由编译器自动分配和释放,存放运行时候的局部变量,函数参数,返回数据,返回地址。堆区:一般由程序员自己分配,然后自己释放,例如栈的实现malloc开辟的数组空间。数据段(静态区):存放全局变量,静态数据,常量,程序结束后自动释放。代码段(常量区):存放常量字符串和可执行代码,程序结束自动释放。
2024-09-09 13:25:26
1504
原创 C++--static成员和友元
静态定义的成员变量在类外定义,变量类型 类名::变量名=value的形式。此外,static还可以在类里面定义函数,这种static修饰的函数在外调用必须加域名才能使用,因为static修饰的函数不会隐含this指针。
2024-09-08 14:48:49
796
原创 C++---初始化列表
此时就需要初始化列表去初始化A实例化的对象a。总结:尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。
2024-09-07 19:43:18
514
原创 C++---构造函数,拷贝函数,析构函数
构造函数一般有三种第一种是C++编译器自己生成的无参默认构造函数,是一种隐式构造函数。第二种自己定义的显性构造函数,函数重载实现第三种通过全缺省可以将第二种和第三种合并在一起比较建议用合并这一种。3 拷贝构造函数3.1 概念3.2 特征
2024-09-06 22:07:41
977
原创 C++---基础概念
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。// ADD是命名空间的名字,一般开发中是用项目名字做命名空间名。// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;类型& 引用变量名(对象名) = 引用实体;int a = 10;//
2024-09-04 16:02:08
1582
原创 7种常见排序
2 希尔排序 这里gap最好为N/3+1,这样对于普遍数据排序效率相对更高,更优。3 选择排序 4 堆排序 5 冒泡排序6 快排1.左右指针确定一个基准值,一般选取数组最后一个元素小标为key,然后L先从前往后遍历找到大于key的数,再R从后往前遍历找到小于key的数,然后交换L与R的数组元素,直到L与R指向同一个空间,此时再把key 与L或者R指向的元素交换,这只是其中一趟排序。 2.挖坑法3.前后指
2024-09-03 14:08:28
730
原创 二叉树和堆知识点
大根堆最大的数在堆顶,小根堆最小数在堆顶。堆排序,排升序建小根堆。排降序建大根堆。3.3 堆的声明 3.4 创建堆3.5 堆排序 3.6 堆的插入先插入一个数,在进行向上调整。3.7 堆的删除删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。3.8 Top-k问题对于Top-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下子
2024-09-01 20:34:49
1364
原创 设计循环队列
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。// 返回 false,队列已满。// 返回 true。// 返回 true。// 返回 true。// 返回 true。// 返回 true。// 返回 true。
2024-08-30 16:27:51
1220
原创 环形链表问题
此时fast和slow距离为1,所以我们可以理解到,当slow和fast在环中,如果slow和fast的位置不同,当slow每走一步,fast走两步,那么fast和slow之间的距离每次就会少一步,以此往复,fast和slow终将相遇。对于一个存在环的链表,在遍历链表时,指针进入到环状链表后一定是一个死循环,根据这个特性,我们可以设置一个。假设头节点到环入口节点的距离为L,入口节点到相遇结点距离为X,假设环周长为C。定义慢指针和快指针,如果存在环链表,则分割快指针和慢指针的相交位置。
2024-08-28 17:04:51
675
原创 链表分割(C语言)
如上链表,x等于4,则需要将小于4的结点放到左边,且不改变其本身的相对顺序,即变成3>>2>>1。将大于4的放到右边,不改变相对顺序,即5>>6>>7。通过给出的分割点,将链表分割为左右两个链表,即大于4的放一边,小于4的放一边,等于4的结点随便放哪一边都行。,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。cur为遍历原链表指针,用两个新的头结点去尾插合法满足条件的结点。所以最后得到的新链表为3>>2>>1>>5>>6>>7。
2024-08-28 13:53:55
680
原创 合并两个有序链表
此时比较list1和list2绿色指针处的值的大小,取小的,相等就随便取一个,这里1 = 1,我们取list2的1尾插入head链表中。蓝色圆形为头节点,每条单链表定义了一个绿色的指针,头节点head处定义了一个tail的指针,记录尾插末尾。此时list2为空,剩下只需要将tai->next=list1将list1剩余元素连在一起即可。新链表是通过拼接给定的两个链表的所有节点组成的。list1的绿色指针为1小于list2绿色指针的3,则取1。3<4,取list2中的3。2<3,取list1的2。
2024-08-27 20:49:18
402
原创 数组形式的整数加法(大数运算)
大数运算,顾名思义,就是很大的数值的数进行一系列的运算。我们知道,在数学中,数值的大小是没有上限的,但是在计算机中,由于字长的限制,计算机所能表示的范围是有限的,当我们对比较小的数进行运算时,如:1234+5678,这样的数值并没有超出计算机的表示范围,所以可以运算。但是当我们在实际的应用中进行大量的数据处理时,会发现参与运算的数往往超过计算机的基本数据类型的表示范围,比如说,在天文学上,如果一个星球距离我们为100万光年,那么我们将其化简为公里,或者是米的时候,我们会发现这是一个很大的数。
2024-08-27 15:11:05
959
原创 leetCode--轮转数组(C语言)
向右轮转 2 步: [3,99,-1,-100]向右轮转 1 步:[7,1,2,3,4,5,6]向右轮转 2 步:[6,7,1,2,3,4,5]向右轮转 3 步:[5,6,7,1,2,3,4]向右轮转 1 步: [99,-1,-100,3]如果k>数组元素个数,则令k=k%n。,将数组中的元素向右轮转。
2024-08-26 14:16:44
474
原创 只出现一次的数字(两个单生狗问题)
想要将nums中只出现一次的数字拧出来我们需要观察到数组内的数字有一个特性就是除开只出现一次的数字之外,其余的数字都是成双成对出现的,如果我们把成双成对的数字给去掉只留下出现一次的数字之后是不是就能离答案更近一些了呢?我们就能得到一个110的二进制序列,这时候我们相当于把其他成双成对的元素都去掉了,只剩下由3和5异或而成的二进制序列。所以我们可以把nums= [1,2,1,3,2,5]的内容统统异或起来得到1 ^ 2 ^ 1 ^ 3 ^ 2 ^ 5 = 3 ^ 5。这样我们就得到了两个只出现过一次的数字。
2024-08-26 14:02:07
555
原创 字符操作函数和内存操作函数
strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。strtok函数会改 变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
2024-08-24 22:10:10
639
原创 通讯录优化(动态内存管理+文件操作详解)
在动态内存空间的开辟和文件操作中存在诸多细节,比如我在写文件基于动态内存的文件操作通讯录的时候在每次开辟新空间开辟到4个的时候,第五个就会出现卡死现象,导致输入文件内的内容全部乱码,最后发现是初始化的时候需要先判断预置的空间是否能存储文件中读入的内存,如果不够则需要先开辟新的内存供给存储。
2024-08-23 19:40:14
1127
原创 通讯录(C语言实现)
1.添加联系人信息;2.删除联系人信息;3.查找联系人信息;4.修改联系人信息;5.显示联系人信息;6.排序联系人信息;0.退出程序。
2024-08-21 22:44:17
758
原创 C语言扫雷游戏实现
扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。
2024-08-09 22:17:29
795
原创 三子棋详解
本次代码虽然功能实现没什么问题,但是代码比较冗余,更待优化。在撰写本文的过程中,可能未能传达我所有的初衷与见解,这主要归咎于我个人在表达上的局限性。为此,希望每一位读者能够理解和包容。若您在阅读过程中发现任何表述不清或词不达意之处,非常欢迎您在评论区留下宝贵的问题、意见或建议。同时,对于文中涉及的代码部分,我也持开放态度接受大家的审视。如果您发现任何潜在的错误、改进空间或优化建议,请不吝赐教。我们共同的学习与讨论,将推动知识的进步与共享😆😆。
2024-08-08 20:39:51
1222
原创 汉诺塔问题(C语言)---图文结合超好理解
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
2024-08-07 20:15:08
900
原创 Leetcode---415.字符串相加(C语言)
转化为字符存入内存中,进位则参与后续运算,然后i,j同时向左移动一位,将所指向的字符串的其中一位相加并加上刚才算出来的进位。去得到传入字符串的每一个字符,这是我们首先需要知道的一个点,其次,这是一个函数指针呀,所以我们最后要返回的就是一个分配了具体空间的一个元素的。由上述流程可知,最后得到的结果是反转的,如示例二得到结果为。i索引到NUM1所指向字符串最高位,j指向字符串。可以看到是给了我们一个函数指针的一个框架,其中。,此时需要写一个反转字符串的代码反转一下。,计算它们的和并同样以字符串形式返回。
2024-08-04 20:15:16
452
原创 小王入门C语言
编程是一种逻辑性十分强的技能,所以应该具有一个良好的逻辑思维能力,这是需要持续训练的,比如数学能力,逻辑推理能力,还有抽象事物的理解能力,所以在这些方面需要看一些相关书籍或者在有基础的前提之下去刷题!其次就是前车之鉴也是很有必要的,不懂就问,多去看看别人的文章或者多去询问别人的意见对自己的学习道路也是会很有帮助的。大家好,我是一位热爱编程的科班生,虽然已经学习了两年的C/C++编程知识,但个人感觉知识框架几乎是零零散散的,所以我想通过这样的方式从基础开始梳理我所学习的知识框架,让自己的能力有所提升。
2024-08-04 15:43:31
202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人