- 博客(28)
- 收藏
- 关注
原创 C++ 优先算法 —— 长度最小的子数组(滑动窗口)
若数组中所有的值相加都是 < target ,那么不存在符合条件的子数组(整个数组也算是数组的子数组),就返回0。但此时可以观察到,没有下一个元素了,这时让right指向的下一个元素就已经越界了,这时窗口就结束了。也就是sum符合结果时,再向后枚举都符合结果(正整数数组),但是len是递增的,不符合要求,后面不需考虑。此时,就可以更新以下结果了,这里结果就是len(子数组长度)的,最小长度的子数组长度必定是1。
2024-11-24 01:56:16
1444
14
原创 C++ —— string类(上)
string严格来说是属于C++标准库的,不是属于STL(标准模板库)。我们看到里面其实是没有string的,string产生的比STL较早的,在头文件中,会单独看到一个string的头文件。C++文档所谓的string其实就是一个字符串 ,它要解决的就是要管理字符串。(日常当中字符串是很多的,如:身份证号码,家庭地址,电话号码等等)打开string头文件可以看到:有4种,这个与所谓的编码有关系,这里我们先看string://原生类型除了char,还有其他字符的类型(编码的原因)//原生类型。
2024-11-18 00:35:11
1228
21
原创 C++ 优先算法 —— 四数之和(双指针)
这里就相当于划分成,固定第一个数,剩下的就是利用三数之和思想解决,三数之和中,也是要固定一个数(这里也就是第二个数),接着利用两数之和解决,也就是在剩下的区间内用双指针算法。通过上图可以看到需要套两次for循环加一个while,这里target可以不同(target可以随意)。这里套了四层for循环,时间复杂度就是。
2024-11-12 01:30:27
1262
13
原创 C++ 优先算法 —— 三数之和(双指针)
所以,也就是找到一种结果之后,不要停(两个指针不停),缩小区间(两指针都向内移动一步),继续寻找符合的情况。虽然暴力枚举会超时,这里还要介绍一下的,因为双指针解法就是基于暴力枚举进行优化的。(这里去重在下面双指针解法解释),这里套了三个for循环时间复杂度:O(N³)。这里的越界问题不止对整个数组区间的越界,还有对要用双指针处理的区间可能会越界。的问题,这里的s就是这个固定的数的相反数。题目给的示例二就是没有最终结果的情况。
2024-11-09 02:32:33
1575
13
原创 C++ 优先算法 —— 查找总价格为目标值的两个商品(双指针)
所以上述right固定21,left向内枚举的情况可以直接不用考虑了,直接让right向前移动一位,(right--)。所以上述left固定2,right向内枚举的情况可以直接不用考虑了,直接让left向后移动一位(left++)这道题的一个关键的地方,它先说明了这是一个升序的数组,对于后面要解释的双指针的算法是重要的。先固定一个数,然后找第二个数与它匹配,但是这个会超时,图示将在后面展示。接下来,继续判断sum的情况。
2024-11-03 20:13:56
726
13
原创 C++ 优先算法——盛最多水的容器(双指针)
水的高度一定是由较低的那条线的高度决定的:例1图中,是由7决定的,然后求出8和7它们对应的下标的之间的差,再进行相乘就得出体积。题目的意思就是要我们找出一个数组中,两个下标对应的值,取它较小的那个值,并与两个下标之差的乘积,找出这个最大的乘积。然后算出来V1,发现1是较小的,然后就直接让left向后移动,不用再考虑1的向内枚举了。,因此上述取的小部分对于4就不用考虑了。我们挑一组验证一下,题目给的结果是不是最大的。
2024-11-01 02:08:44
714
3
原创 C++ 优先算法——复写零(双指针)
这个也要用双指针算法来去寻找它,我们把dest定义为最后需要复写的位置(结果中数组最后一个位置),因此刚开始时,并不知道最后位置在哪,让dest指向-1;cur的作用:从前往后遍历数组,决定dest走1步还是2步。所以可以仅需要判断dest是否走向最后位置来判断是否找到最后要复写的数。// 先找到最后一个要复写的数// 复写位置// 遍历数组if (arr[cur] == 0) { //遇到0,dest移动两位dest += 2;
2024-10-28 18:53:03
772
2
原创 C++ 优先算法——移动零(双指针)
特点:给了一个数组,然后又给了一个指定的规则或标准,让我们在这个规则下把这个数组划分成若干个区间。不过要注意,这个移动题目要求是在原数组中原地操作,不能新额外开辟一个数组来修改。此题目就是,给了我们一个标准,就是把非0元素放在前面,0元素放在后面。这道题目就可以通过双指针算法来解决(我们最后把代码提交一下:(结合起来,这个题目就可以。总结:如何做到(实现)?
2024-10-24 20:21:16
694
2
原创 C++ —— 实现一个日期类
通过对类和对象(这里链接是类和对象的介绍)的学习,类就是一种模型一样的东西,是对象一种抽象的描述。所以实现日期类,就是实现一个日期模型,里面有所对应的成员变量(属性:年/月/日),还有一些它的方法(成员函数:打印该日期、对日期加减等)。
2024-10-23 01:43:45
1190
1
原创 C++ —— 类和对象
类是对象一种抽象的描述,是定义同一类所有对象的变量和方法的蓝图或模型,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它,因为这些成员变量只是声明,只有在实例化出对象的时候,才会分配空间。所以,用类类型在物理内存中创建对象的过程,就是类实例化出对象。(一个类可以实例化出多个对象,实例化出的对象,会占用实际的物理空间,用来存储类成员变量 )类和对象的关系是类是对象的抽象,而对象是类的具体实例。C语言中,我们定义一个结构体是用的struct//定义一个日期类型int year;
2024-10-19 03:37:21
1359
6
原创 C语言——贪吃蛇游戏的实现
我们都有玩过一个小游戏——贪吃蛇,贪吃蛇也是一个经典游戏。如上图所示,游戏玩法就是操控一个蛇,让它吃掉食物,每吃掉一个食物就会增加自己身体一格长度,并且保证自己不能撞到墙和自己本身,我们就可以通过这些功能,去用代码实现这些功能从而实现贪吃蛇游戏。(贪吃蛇游戏如上图所示)绘制贪吃蛇地图蛇的移动蛇吃食物蛇的功能(上、下、左、右方向键,控制蛇的动作)蛇撞墙死亡蛇撞到自己死亡蛇速度加速和减速暂停游戏计算得分退出游戏我们完成的游戏,是在控制台窗口完成。
2024-04-22 18:15:42
788
36
原创 C语言——编译和链接
根据汇编指令和机器指令的对照表一一的进行翻译,也不做指令优化。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。静态语义分析通常包括声明和类型的匹配、类型的转换等,这个阶段会报告错误的语法信息。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一。其中,编译器展开成三个过程,就如下所示:(以gcc为例,拆解编译链接的过程)链接解决的是一个项目中多文件、多模块之间的互相调用的问题。在ANSIC的任何一种实现中,存在两个不同的环境。
2024-03-28 17:39:53
1818
12
原创 C语言——文件操作
我们写的程序的数据是存储在电脑的内存中,程序退出,内存就回收,若没有文件的话,数据就会丢失,再运行程序时看不到上次程序的数据了,如果要把数据进行持久化的保存,我们就要使用文件。以ASCII字符的形式存储的文件就是文本文件。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或。因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭文件。二进制文件:数据在内存中以二进制的形式存储,如果不加转换的输出到外存的文件中就是二进制文件。
2024-03-27 23:11:59
999
9
原创 C语言——程序拷贝文件
使用所学文件操作,在当前目录下放一个文件data.txt,写一个程序,将data.txt文件拷贝一份,生成data_copy.txt文件。制作不易,求各位大佬三连qwq。可以看到,我们成功拷贝了。所以我们需要的函数有。这样也可以的实现拷贝。
2024-03-23 14:32:52
797
16
原创 整数和浮点数在内存中存储
目录数据在内存中的存储整数的存储大小端字节序和字节序判断浮点数在内存中的存储浮点数的存储浮点数如何存储和取出存储的是二进制。二进制表示:原码,反码,补码,三种方法均有符号位和数值位两部分,符号为用0表示正,1表示负,而数值位最高位的一位是被当作符号位,剩余的都是数值位。正整数的原、反、补码都相同负整数的三种表示方法各不相同。 原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。 补码:反码+1就得到补码。(二进制)对于整型:内存中存储的是
2024-03-17 17:16:59
955
15
原创 C语言一些字符函数及内存函数介绍使用和一些模拟及部分数据在内存中的存储
C语言中除了8bit的char外,还有16bit的short型,32bit的long型(看具体的编译器),对于位数大于8位的处理器,例如16位或者32的处理器,由于寄存器宽度大于一个字节,那么必然存在一个如何将多个字节安排的问题,导致了大端存储和小端存储模式。memcmp函数的模拟实现可以参照着strncmp函数的模拟实现,只不过指针参数用的void*,用来接收任何类型的,所以应当作出相应的更改,返回值需强制类型转换一下再进行相减。(对于重叠的内存,交给memmove处理)
2024-03-15 22:06:08
655
5
原创 C语言字符串函数strcmp、strstr的使用及模拟实现
C语言官方是这样介绍strstr函数的:函数的功能在一个字符串中查找另一个字符串是否出现过,若出现过则返回字符串str2在字符串str1中第一次出现的位置(地址),若没有出现返回的就是空指针。函数的比较匹配不包含\0字符,以\0作为结束标志。//因为返回的是地址(位置),所以返回值用指针类型//const修饰同上述strcmp//函数功能:在str1中找str2。
2024-03-12 12:55:57
2578
6
原创 C语言-strlen、strcpy、strcat的使用以及模拟实现
strlen、strcpy、strcat等这些字符串函数,在使用时候我们需要包含头文件,那么这三个字符串函数有什么作用、以及它们怎么使用和怎么去模拟实现呢?
2024-03-08 18:08:17
1138
2
原创 C语言————深入理解指针(1)(基础使用)
所以我们怎么规避野指针呢,如果明确知道指针指向哪⾥就直接赋值地址,如果不知道指针应该指向哪⾥,可以给指针赋值NULL.NULL是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的,读写该地址会报错的!理解指针,首先要知道并了解地址和内存,在计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那内存空间如何高效的管理呢?const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。
2024-03-07 01:54:40
890
4
原创 qsort的使用练习以及qsort函数的模拟实现
这个至于为什么会出现char*,从前面学习的指针来解释,char*每次加一即加的是一个字节,void*类型的指针是无具体类型的指针,这种类型不能被直接解引用,也不能进行加减运算,即换成char*最为方便,每次只交换一个字节,width为界限,接下来就是完善整个程序。这里面cmp就是函数指针,回调两个元素的比较的函数,width是宽(即数组元素的大小),sz元素的个数,里面还包含的Swap函数是用来交换元素的,其函数为下。回调函数就是一个通过函数指针调用的函数。其中compar是函数指针类型,用来回调函数。
2024-03-02 17:59:31
269
6
原创 如何用C语言实现扫雷游戏
大家好,今天给大家带来如何用c语言代码来实现扫雷游戏,扫雷游戏大部分人都不陌生,在开始接触电脑时候基本都玩过的一款电脑自带益智小游戏,本人通过一段时间的c语言学习,写了一个用c语言完成的简单的扫雷游戏代码,若有错误和不足,需要优化的地方,请各位大佬多多指教!!!!!!
2024-01-24 18:54:34
910
2
原创 C语言分支和循环语句
while循环首先上来就是执行判断表达式,若为0,则结束;反之,则执行循环语句,然后再判断,是否进行下一次判断。if else 语句中,else可以与另一个if语句使用,构成多重判断。switch语句是一种特殊的if else结构,判断条件有多个结果的情况。在执行循环的过程中,c语言提供两个关键字:break和continue。do-while表达式是先直接进入循环体执行,然后再执行判断表达式。注:如果有多个if和else,else总是跟最近的if匹配。case后的值,必须是整形常量表达式。
2023-12-04 21:10:56
383
原创 本人自我介绍
本人是一位计算机科学与技术专业的大学生,初来驾到优快云,想在这里与各位计算机大佬学习交流。对于学习,我打算多挑时间来学习自己专业,多练习写代码的能力,多了解关于专业的以后所需。对于每周学习,挑出两三天的每天一些时间去专门学习,其余时间若有多余时间也去学习。本人编程目标是想学好自己专业所需的课程,并精通这些。
2023-11-20 16:12:05
91
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人