自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 类和对象(1)

/由成员函数和成员变量组成类体中的内容称为类的成员,类的变量称为类的属性或成员变量,类中的函数称为类的方法或成员函数。1类的声明和定义全部放在类体当中,需要注意的是,如果函数在类中定义,编译器可能会将其当作内联函数处理。int age;2类的声明放在头文件中,类的函数放在源文件当中。注意:成员函数之前需要加类名::声明放在person.h文件当中public:public:char* _sex;int age;

2024-07-19 16:18:56 557

原创 c++基础

命名方法:使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。命名空间中可以定义变量/函数/类型int val;引用不是定义一个新的变量,而是原有的变量有了新的别名,并不需要为这个别名开辟一个新的空间,它和引用的变量公用一块存储空间。引用类型&引用变量名=引用实体名;int &ra=a;引用变量必须和引用实体是同种类型的。

2024-07-16 22:08:25 716

原创 排序(2)

那么当我们解决下面这个问题的时候:当开始时,begin=0,end=7,mini=begin=0,maxi=begin=0。i=1,1小于0,所以mini=1。此时最大值是9(begin),最小值是1(i)。当begin和max重合,就会出现4 3 5 6。

2024-07-07 17:22:53 401 2

原创 排序(1)

接下来,我们就来到了排序的章节,嘿嘿!加油!

2024-07-05 10:39:56 351

原创 二叉树(2)

二叉树的销毁分为三个部分的销毁:根节点,左子树和右子树层序遍历(上一层带下一层)队列里面的指针指向树的节点,把节点释放掉,不会影响到树的节点。判断二叉树是否为完全二叉树:1、层序遍历走,空也进队列2、遇到第一个空节点时,开始判断,后面全空就是完全二叉树,后面有非空就不是完全二叉树。不可能出现,遇到空时,后面还有非空没进队列。后面非空,一定是前面非空的孩子。当层序出到空的时候,前面非空都出完了,那他的孩子一定进队列了。那么这时候就不需要担心。

2024-07-02 17:17:46 377

原创 二叉树(1)

十分抱歉,停更了差不多一个月。暑假了,我又回来了!

2024-06-30 22:52:22 801 1

原创 栈与队列(2)

head==tail是空还是满呢 方法一:额外多开一个空间。队列 如队列顺序1 出队列顺序1。栈 入栈顺序1 出栈顺序N。队列的作用是用来保持公平性。方法二:增加一个size。

2024-05-17 15:31:44 309

原创 栈和队列(1)

栈是一种特殊的线性表,只允许在一端进行插入和删除操作。如果不在缓存,就叫作不命中,要把数据从内存加载到缓存,再访问。第一步:左括号入栈,第二步:出栈顶的左括号判断和右括号是否匹配,如果匹配,继续,如果不匹配,终止。栈的实现可以用数组或者线性表实现,相对而言,数组实现更优,因为数组在尾上插入的代价较小。以上代码测试出如果是一样的,那么就是原地扩容,如果不一样,就是异地扩容。现在是个激动人心的时刻,因为我们来到了栈和队列的章节。出栈:栈的删除操作叫作出栈,出栈也在栈顶。异地扩容就是在新的地方开辟一个新的空间。

2024-05-15 16:15:33 353 1

原创 链表带环问题

(慢指针有没有可能在环里走了好多圈呢,没有可能,如果走了好多圈,fast一定会超过slow。假设slow进环时,slow和fast之间的距离是N。假设slow进环的时候,fast跟slow的距离是N,fast追击slow距离变短。假设slow一次走一步,fast一次走三步,假设fast和slow之间的距离是N。若C-1是偶数,那么追得上,若C-1是奇数,那么又再一次追不上了,陷入死循环。2slow一次走1步,fast走3步,4步,5步可以吗?fast走的距离是x的三倍,3L=L+X*C+(C-N)。

2024-05-13 20:00:51 312

原创 日拱一卒,月进一步(16)

从i=0开始,并判断nums[i]

2024-05-06 20:30:18 425 2

原创 日拱一卒,月进一步(15)

再依次在满足条件的矩形内+1,最后找出最大数字的个数。首先将数组排序,如果数组中全是非负数,那么排序后的后三个数相乘即为最大值,如果全为非正数,那么最大的三个数相乘也为最大值。2此地有花 因为这是从前往后判断,所以当判断上一块地可以种花时,而这块地已经有花了,上块地就不能种花了,count--综上,我们在给数组排序后,分别求出三个最大正数的乘积,以及两个最小负数与最大正数的乘积,二者之间的最大值即为所求答案。2)上一块地没有花,这块地能种花,count++1此地无花 1)上一块地有花,这块地·不能种花。

2024-05-04 23:30:19 148

原创 日拱一卒,月进一步(14)

快排并从第一位开始隔位取数字。

2024-05-03 22:06:50 165

原创 日拱一卒,月进一步(13)

【代码】日拱一卒,月进一步(13)

2024-05-03 19:30:29 355

原创 模拟实现memcpy,memmove,memset,memcmp

使用注意事项:从source的位置向后复制num个字节数据到destination所指向的内存位置中。这个函数遇到如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。\0并不会停下。当source和destination有一定的重叠,复制的结果都是未定义的。

2024-05-03 15:35:05 227

原创 日拱一卒,月进一步(12)

【代码】日拱一卒,月进一步(12)

2024-05-02 17:07:17 197

原创 日拱一卒,月进一步(11)

再用differ标记不同的元素个数当前一个元素不等于后面一个元素,differ++,当differ等于2时候,且此时后一个元素仍然不等于前一个元素,就说明这个数字是第三大的元素。然后,我们再次遍历数组,找到那些未被取反(或未被标记)的索引,它们对应的值就是缺失的数字。有些元素出现了一次,有的元素没有出现过,要求找到没有出现过的数字。qsort(首元素地址,元素个数,字节数,比较函数)先用qsort函数,将数组的元素从小到大排序。本身的索引和值之间的关系来找到缺失的数字。上,并将该索引处的元素。

2024-05-02 14:17:48 150

原创 日拱一卒,月进一步(10)

最朴素的思想是存储数组nums的值,每次调用sumRange时,通过循环的方法计算数组nums从下标i到下标j的元素和,需要计算j-i+1个元素的和。因此,要计算sumRange(i,j),则需要计算数组nums在下标i-1和j的前缀和,并计算两个前缀和的差。即可满足调用sumRange的时间复杂度都是O(1)。具体实现方面,假设数组的长度nums等于n,创建长度为n+1的前缀和数组nums,sums[i+1]=sums[i]+nums[i],则sums[i]表示数组从0到下标i-1的前缀和。

2024-05-01 22:11:02 201

原创 日拱一卒,月进一步(9)

右指针不断向右移动,每次右指针指向非零数,将左右指针对应的数字交换,并且左指针右移。这种移动的题目我们首要的想法就是利用双指针。左指针指向已经处理好的序列的。每次交换都是左指针的0与右指针的非0数交换,因此非0数的顺序不变。2右指针right左边直到左指针均为0。1左指针left左边均为非零数。首先祝大家五一劳动节快乐!,右指针指向待处理序列的。

2024-05-01 21:02:05 233 1

原创 日拱一卒,月进一步(8)

这个题目一出现,我就立马有了思路。其实就是让每个数字互相异或,最后得出的数字就是只出现一次的数字。投票算法可以省略循环中不必要的比较,那么我们就开始学习这是如何完成的吧。

2024-04-30 16:33:15 139

原创 日拱一卒,月进一步(7)

为了使买股票利润最大化,应该在下标[0,i-1]选择最小值作为price[j]。遍历所有可能卖出股票的日期,即可得到最大利润。(1)使用prices[i]-prevMin更新最大利润。(2)将prevMin的值更新为prices[i]。遍历结束后即可获得最大值。

2024-04-30 14:32:53 149

原创 日拱一卒,月进一步(6)(杨辉三角2)

【代码】日拱一卒,月进一步(5)(杨辉三角2)

2024-04-30 11:17:38 137

原创 日拱一卒,月进一步(5)

令我十分意外地是,这题竟然也曾经写过,但我却没有思路,罪该万死。

2024-04-30 10:11:58 187

原创 日拱一卒,月进一步(4)

数字加法应该从前向后遍历,因此我们应该从数字末尾从后向前遍历。如果数字不为9,则直接在末尾+1。如果末尾为9,那么将其变为0,并且在下一位+1。如果一直遍历都为1,那么在数组第0位插入1。如果所有元素都是9,那么我们只需要构造出一个比原数组多1个长度的数组,将首元素置为1,其余置为0即可。如果有若干个9,那么我们只需要在末尾找到第一个不为9的元素。随后将末尾的9全部置为0。我们在对数字进行+1时,只需要关注数组的末尾有多少个9即可。如果末尾没有9,那么直接在末尾+1。

2024-04-30 09:29:12 90

原创 日拱一卒,月进一步(3)

当左指针指向的元素等于val,此时将右指针指向的元素赋值给左指针所指向的位置。然后右指针左移一位,如果赋值过来的值也恰好等于val,可以把右指针指向的值继续赋值过来,(左指针指向val的值会继续被覆盖),知道左指针指向的值不等于val。这种删除元素的题目,我们一般都是采用双指针。如果右指针指向的元素不等于val,那么它是输出数组的第一个元素,我们就将右指针指向的位置复制到左指针,同时左右指针同时加加。如果右指针指向的元素等于val,这个元素不能在输出数组里面,此时右指针向前走一位,而左指针不动。

2024-04-28 20:34:54 155

原创 日拱一卒,月进一步(2)

如果数组的长度等于0,则数组不包含任何元素,返回0。如果数组nums的长度大于0,数组中至少有一个元素,删除重复元素之后也至少有一个元素。定义两个指针:一个快指针和一个慢指针,快指针表示遍历数组到达的下标位置。一开始fast指针先走,如果fast等于前一个fast,那么fast继续向前走,如果fast不等于slow,那么把fast里面的值赋值给slow,slow再继续往前走。对于任意i<=k<=j,都有nums[i]=nums[k]=nums[j]。利用数组有序的特点,可以用双指针的方法删除重复元素。

2024-04-28 14:28:00 351

原创 日拱一卒,月进一步(1)

to be honest,由于本人的菜菜又菜菜,看到这题是基本没有思路的,也在最近的测试中比较受挫。但是要注意的是:由于每一个x之前的元素都已经被匹配过,所以只要寻找x后面的元素即可。分配一个大小为2的整数数组来存储这两个数的索引,并返回这个数组。从出思路,到完成代码,这也是一个重要且艰难的环节。这意味着除了可能的返回值(一个大小为2的数组)之外,函数没有使用任何与输入大小。完成这个代码之前,我们先对其进行时间复杂度和空间复杂度的分析。在空间复杂度方面,如果函数找到了两个数的和等于目标值,它会使用。

2024-04-28 11:11:59 258

原创 了解时间复杂度和空间复杂度

在学习数据结构前,我们需要了解时间复杂度和空间复杂度的概念,这能够帮助我们了解数据结构。算法效率分为时间效率和空间效率。

2024-04-26 17:02:54 567 3

原创 贪吃蛇项目实践!(下)

比较蛇指向的节点和食物指向的节点是否相同。

2024-04-26 11:03:45 255 1

原创 贪吃蛇项目实践!(上)

大家好,今天我带着大家从0构建起贪吃蛇项目的高楼大厦~要实现这个游戏,我们需要实现哪些功能呢?实现基本的功能:• 贪吃蛇地图绘制• 蛇吃⻝物的功能(上、下、左、右⽅向键控制蛇的动作)• 蛇撞墙死亡• 蛇撞⾃⾝死亡• 计算得分• 蛇⾝加速、减速• 暂停游戏。

2024-04-26 09:54:44 954

原创 双向链表介绍

带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨的”。哨兵位存在的意义:避免链表出现。双向链表的结构:数据+指向下一个节点的指针+指向前一个节点的指针。首先我们要申请一个新的节点,再改变指针的指向。双向链表为空,只有一个头结点。这个函数对空链表的情况也满足。LTInsert方法包含了头插。在pos位置之后插入数据。

2024-04-25 22:35:14 406

原创 单链表的应用

上篇博客中,我们学习了单链表,为了更加熟练掌握这一知识点,就让我们将单链表的应用操练起来吧!思路一:遍历原链表,将值为val的节点释放掉。思路一:遍历原链表,将原链表的节点头插。思路二:创建三个指针,完成链表的翻转思路一:直接返回node/2思路二:快慢指针,slow每次走一步,fast每次走两步存在重复代码,如何优化呢?我们可以定义一个头结点,也就是哨兵位。这个链表实际叫作带头链表。第一步 创建带环链表第二部 遍历带环链表思路一:在原链表上修改若pcur的节点小于x,往后走。

2024-04-12 20:16:26 484

原创 了解单链表

我们设置两个指针src(源数据)和dst(目标数据)分别指向数组的第一个位置,如果src指向的数值是我们要删除的数据,那么src++,如果src要的数据不是我们要删除的数据,那么把src的数据赋值给dst,并让src++,dst++。=NULL),那么此时不满足。要找到尾结点,再把尾结点和新节点连接起来。我们让尾结点的下一节点不要指向NULL,而是指向newNode。思路一: 创建新的数组,遍历原数组,将不为val的值放到新数组当中。我们需要有一个定义链表的节点的结构,并且将它们连接在一起,就成了链表。

2024-04-10 21:39:13 419 3

原创 顺序表的应用之通讯录

学习了顺序表之后,我们也得知道它的实际用途吧!所以,我们今天来学习一下通讯录的实现。

2024-04-07 09:08:41 248 2

原创 非写代码无以致远

标题党一下,本篇文章主要汇总了一些代码题,让大家写一些代码练习一下吧!

2024-04-04 18:53:30 298 2

原创 实现顺序表的增删查改

线性表是具有相同特性的数据元素的有限序列。线性表是一种在实际运用中广泛运用的线性结构,如线性表,栈,队列,字符串等。顺序表的本质是数组,实现了对数组的封装,例如增删查改等功能。顺序表分为静态顺序表和动态顺序表:int arr[N];int size;//有效数据个数int* arr;//动态数组int size;//有效数据个数//空间大小但是目前这个结构体只能存储int类型的数据,所以我们给数据类型起一个别名,让其更好存储其他类型的数据。//动态数组int size;

2024-04-03 21:14:00 268

原创 练习所学文件操作的相关函数

上上篇文章,我们介绍了文件和文件操作函数,现在我们来练习一下所学文件操作的相关函数吧!实践出真知~

2024-03-31 20:23:17 904 2

原创 C语言程序编译和链接

在ANSI C的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。

2024-03-30 17:36:03 472 1

原创 学习文件和文件操作

要将数据进⾏持久化的保存,我们可以使用文件。磁盘(硬盘)上的⽂件是⽂件。我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类。程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows环境后缀为.exe)。数据文件:⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件。有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使⽤,这⾥处理的就是磁盘上⽂件。

2024-03-30 15:04:18 1044 1

原创 通过cplusplus网站学习函数用法演示

在我们学习c语言或者c++时,总会遇到一些我们熟悉的库函数,这时候就需要我们通过cplusplus网站搜索学习,下面就由我为大家演示一下如何通过这个网站的页面学习函数的使用方法吧!无法被解析为有效的整数(例如,它是一个空字符串,或者它不包含任何数字),则函数返回 0。指向的字符串,直到遇到无法转换为数字的字符为止,然后将解析得到的数字返回。函数的返回类型为int,函数接收的参数类型为const char* 类型。如果转换后的值超出 的可表示值范围,则会导致。成功后,该函数将转换后的整数作为值返回。

2024-03-27 20:44:52 399 1

原创 练习使用动态内存相关的4个函数:malloc、calloc、realloc、free

在了解使用动态内存相关的四个函数之前,我们先了解一下,为什么要有动态内存分配?首先,我们已经掌握了一种开辟内存的方式,就是直接使用int i=20;但是这样开辟空间有两个特点,1:空间开辟大小是固定的,2:数组在创建时,必须设定数组的长度,数组空间的大小一旦确定就不能更改可以申请和释放空间,这样就⽐较灵活了。

2024-03-27 20:03:20 1134 2

空空如也

空空如也

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

TA关注的人

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