- 博客(239)
- 收藏
- 关注
原创 OJ 旋转图像
给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。你必须在旋转图像,这意味着你需要直接修改输入的二维矩阵。使用另一个矩阵来旋转图像。
2024-09-20 19:40:05
629
原创 OJ 组合总和
给你一个的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有,并以列表形式返回。你可以按返回这些组合。candidates中的数字可以。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target的不同组合数少于150个。
2024-09-18 20:47:24
894
原创 C++ 重点的关键字
声明变量或函数的存在,但不进行定义,让编译器在链接时在其他源文件中查找定义。这使得不同的源文件可以共享相同的变量或函数。当链接器在一个全局变量声明前看到 extern 关键字,它会尝试在其他文件中寻找这个变量的定义。这里强调全局且非常量的原因是,全局非常量的变量默认是外部链接的。int i = 1;//声明并定义全局变量i//声明i,链接全局变量//错误,多重定义int i;//错误,这是一个定义,导致多重定义main()//正确int i = 5;//正确,新的局部变量i;
2024-09-17 19:05:10
1029
原创 OJ 外观数列
(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。例如,要压缩字符串"3322251",我们将"33"用"23"替换,将"222"用"32"替换,将"5"用"15"替换并将"1"用"11"替换。因此压缩后字符串变为"23321511"。给定一个整数n,返回的第n个元素。
2024-09-16 15:35:31
438
原创 OJ 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2024-09-12 20:23:48
532
原创 OJ 最接近的三数之和
题目:给你一个长度为n的整数数组nums和 一个目标值target。请你从nums中选出三个整数,使它们的和与target最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 提示: 3 <= nums.length <= 1000 -1000 <= nums[i] <= 1000 -10^4<= target <= 10^4示例:代码编程class Solution {public:
2024-09-11 19:57:53
266
原创 OJ 整数转罗马数字
罗马数字是通过添加从最高到最低的小数位值的转换而形成的。VIIVXIIXIVIXXLXCCDCMIXCMVLD给定一个整数,将其转换为罗马数字。
2024-09-09 20:21:19
724
原创 OJ Z字形变换
将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为行数为3时,排列如下:Y I R。
2024-09-08 16:16:38
422
原创 OJ 爱吃香蕉的珂珂
因为如果选择最多香蕉的那一堆一个小时吃完,那么其他的也能够一个小时吃完,所以最快的香蕉则是一小时吃完 拥有最多香蕉的那一堆。这一题使用二分查找方法,是建立在我们已经观察到了一定会有一个数字既能小于最大堆的香蕉数,又能在规定的h小时内吃完所有的香蕉。而我们需要在h小时内吃完香蕉,所以k的最小值就是需要保证能够吃完所有香蕉的同时不超时且不能是最大值。根据示例观察来看,吃香蕉越快耗时最短,而吃香蕉最快的则是香蕉堆中,最多香蕉的那一堆、所以设立一个left = 1,一个right为最大香蕉数量,随后进行计算。
2024-09-05 20:11:04
390
原创 初步认识URL
URL是Uniform Resource Locator的缩写,中文称为统一资源定位符,它是一种用于在互联网上标识和定位资源的字符串。这个字符串可以被任何网络设备(如计算机、手机等)识别,并指向特定的资源,如网页、图片、视频等。URL的发明是互联网历史上的一个重要里程碑,它使得用户可以方便地访问互联网上的各种资源。
2024-08-12 14:49:08
1058
原创 IP与进程
如上图所示,一个数据从主机A到主机B后,这个数据进入主机内部后,是如何让主机B进行运行和识别该数据,这个数据传输到主机B是手段还是目的?举个例子,聊天是人在聊天,下载文件是人在使用计算机进行下载,浏览网页是人在浏览,那么人是如何知晓聊天记录以及送达,下载的文件是何时下载完毕,网页信息是如何让人查看到的。
2024-08-12 14:14:44
1020
原创 网络 基础
协议,一种约定,计算机之间的传输媒介是光信号和电信号,通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息,要想传递各种不同的信息, 就需要约定好双方的数据格式。
2024-08-10 20:44:41
1125
原创 进程的理解
且,else if 和 else 是同时进程的,和之前C++语言当中的else if else 语句中的不一样,因为这里的else if else是多进程,之前的是单进程进行的,所以这里并不是语法的错误,而是进程的原因。一个进程在磁盘上的数据被删除后,还能跑的原因是进程在运行前,它的数据和代码就已经被加载到了内存中了,所以在磁盘上删除了进程的可执行程序,但是进程仍然能运行的原因就是内存中还有进程的代码和数据。那么子进程的代码和数据是哪里来的?而在之后的进程控制化,也就是PCB结构体是在操作系统内部的!
2024-08-09 14:18:44
1159
原创 操作系统的基本认识
操作系统是一款软件,是计算机启动时使用的第一款软件,是一款进行软硬件资源管理的软件,例如U盘,操作系统可以管理它的接入和弹出,这是对硬件的操作,操作系统可以卸载 计算机上面的 软件,可以管理软件在计算机上的生命周期,这是对软件的操作。
2024-08-09 13:32:42
872
原创 高并发内存池
内存池是指程序预先从操作系统申请一块足够大内存,此后,当程序中需要申请内存的时候,不是直接 向操作系统申请,而是直接从内存池中获取。同理,当程序释放内存的时候,并不真正将内存返回给操 作系统,而是返回内存池。当程序退出(或者特定时间)时,内存池才将之前申请的内存真正释放。
2024-08-07 15:35:01
924
原创 C++ :lambda表达式
但是还是没有什么意义,应为把捕获的a,b变得可以修改数值,但是捕获的a,b和外面变量a,b不是同一个a,b,所以没有意义,因为捕获列表的捕获是传值拷贝,不是传址拷贝,所以这样使用mutable和这样写法的捕获列表是无效的,没有意义的。因为捕捉的变量是拷贝,而不是直接进行传址拷贝的,而是传值拷贝的,同时捕获的变量是被const修饰的,也就是捕获列表的a,b是不可修改的,所以这里就需要mutable。每一个lambda表达式都是不一样的,可以看到下图中的lambda后面跟随着的一串数字乱码都是不固定的。
2024-07-01 10:05:10
1231
原创 C++: 左值引用和右值引用
自定义类型的右值基本都是匿名对象、传值返回的临时对象。然后右值又有细分,分为纯右值和将亡值,基本上内置类型的右值都是纯右值,而自定义类型的右值基本都是将亡值。对于局部变量来说,它的左值只能是老实的开辟空间然后被利用完被拷贝完后销毁空间,而对于局部变量来说,它的右值(将亡值),它会利用空间!将拷贝数值的空间和临时变量的空间进行交换!有了移动构造后,在传值时,会强行把左值变成右值,强行使用了move (可以不在返回时加上move 编译器会做处理!)/可以看出str虽然是左值,但是和将亡值没什么区别。
2024-06-30 10:29:34
953
原创 C++:红黑树
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路 径会比其他路径长出俩倍,因而是接近平衡的。
2024-05-17 13:23:20
1055
原创 C++:AVL树
当向二叉搜索树中插入新结点后,如果能保证每个结点的左右 子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均 搜索长度。一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树: 1、它的左右子树都是AVL树 2、左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)图上的平衡因子是右子树减去左子树的得到的,请注意无论是左子树减去右子树,还是右子树减去左子树,高度差/平衡因子都只能是 -1 、0、1这三个数之一。
2024-05-05 16:45:48
1020
2
原创 C++:set和map的介绍
1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行 排序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对 子集进行直接迭代。5.
2024-05-05 14:54:35
1258
1
原创 C++:二叉搜索树的底层模拟实现
最后这个判断的前者是判断是否是正常情况,在正常情况中,最小右子树节点的父节点只是一个普通的节点,且最小右子树节点的父节点的左边一定是最小右子树节点,所以可以让父节点指向最小右字数节点的 右子树。是右指针还是左指针?a、删除的节点他的左子树是空的,则他的父节点要指向他的右子树,同理删除的节点他的右子树是空的,他的父节点要指向他的左子树。删除的节点他的左子树是空的,则他的父节点要指向他的右子树,同理删除的节点他的右子树是空的,他的父节点要指向他的左子树。
2024-05-04 15:48:36
887
1
原创 C++:多态
重写确实发生在继承体系中,子类重写父类的虚函数。重定义通常指的是在派生类中定义一个与基类同名的成员,这可以发生在继承体系中,但它与重写不同,因为重写特指虚函数的覆盖。重载是发生在同一个类中的,它指的是在同一个作用域内使用相同的函数名但参数列表不同的函数。重载与继承体系无关,重载只能在一个范围内,不能在不同的类里。
2024-04-21 17:36:44
2349
原创 C++:继承
于是,为了方便对这些拥有相同属性的类做管理,以及减少代码带来的冗余,就将这些相同的属性全部提取出来,放在了一个类 person 中,将person作为父类,而减去了相同属性的各个类,则变成了子类,内部只存放着自己独特的属性,而那些原先相同的属性则以继承父类的方式进行获取。如图所示,父类和子类的成员可以重名,因为它们都是独立作用域,所以它们的成员可以同名,但是子类的成员和父类的成员同名后,编译器会遵循就近原则,在调用这个同名的成员时,会优先调用子类的这个成员。调用Print可以看到成员函数的复用。
2024-04-12 19:52:32
1109
3
原创 模板的进阶
前提须知: 模板的本质其实就是传参,换言之,模板可以类比函数传参,二者的特性类似,但各有各的特点,可以通过函数传参来学习模板。以上面类模板代码为例,我们可以知道, template 中的 size_t N = 10 就算我们所讲的非类型模板参数。和其他模板参数不同的是,非类型模板参数 = 类型 + 常量 ,他的诞生也是为了让编译器在编译的过程中尽可能的省力,也让使用者可以更为方便和便捷的使用一个模板但却创造出更多的类。同时减少了代码的冗余,通过为不同
2024-04-11 19:38:38
678
原创 list的常用接口底层实现与介绍
自定义类型的完善 ,因为我们写的是一个自定义类型,所以读取*it后解决完后还是一个自定义类型的数据结构,所以需要在使用数据结构的写法,表明其中内部的数据即可!it->是需要进行拆解的,可以变成it.operator()->,这里其实是编译器的一种隐藏操作,之前的it++也是一种隐藏操作,可以变化为it.operator++()而it->_a1这里隐藏的是另一个-> ,也就是图中第二个->,第一个->是属于it的重载运算符标识!
2024-04-04 15:49:14
1404
3
原创 vector的简单介绍及常用接口的模拟实现
本篇博客是从底层角度来模拟实现STL的vector,在C++的学习过程中vector是一个非常重要的知识点,vector有多个接口,且每个接口的功能和接收参数都不一样,所以本篇将会重点介绍和讲解几个重要接口的常用方式,并将其进行模拟实现。vector 容器名储存int型的值 vector v;储存double型的值 vector v;储存string型的值 vector v;储存结构体或者类的值的值 vector v;
2024-03-30 15:06:27
710
原创 双指针算法_三数之和
给定一个整数数组 nums ,判断是否存在三元组nums[i]、nums[j]、nums[k],满足 i!=j 且 i!=k 且 j!=k也就是同一个位置只能选择一次!,且还要满足三个数相加等于0,同一个位置只能选择一次!答案中不可以包含重复的三元组、如下图所示,虽然有三组,但是其中两组虽然顺序不一样但是内部的数值是一样的也不行!
2024-03-28 15:08:12
393
原创 双指针算法_和为 s 的两个数_C++
输入一个的数组,和一个数字s,在数组中查找两个数,使得它们的和正好是数字s,如果有多对数字的和等于s,只需要任意输入一对即可。
2024-03-28 14:46:10
441
原创 进程与文件
1.对于每一种外部设备,它们都具有读写方法,而在之前的学习中我们知道,操作系统是需要通过驱动来对底层的硬件进行管理的,所以每一种外部设备的读写方法都即存在它们相对应的驱动之中。2.同时,每一个设备都会由操作系统创建一个数据结构 strcut file ,每次打开一个设备,操作系统就会开始创建一个strcut file。
2024-03-28 14:34:05
1313
原创 双指针算法_盛水最多的容器
如图所示,一个数组内部存储的是高度,求数组中,能够组成最大容量的两个元素,需要注意的是容量是 高度*宽度,这里的宽度指的是两个数字之间的距离,且需要注意高度中,容量要变成最大容量和高度有关,两个数字中最小的那个 * 两个 数字之间的距离 =最大容量。先用指针指向左右两端,然后算出容量v1,随后使用左端的1进行查看是否和其他位置的数字计算出的容量比v1大,答案当然是没用,这是因为在高度不变(高度是1)的情况下变动了宽度(两个数字之间的距离),所以容量没用v1大。
2024-03-26 11:58:35
420
原创 双指针算法_快乐数
通过示例的图解可以看出,如果计算的过程中出现了1,那么就将会在1时进行持续的循环,使得变成一个1的循环,而如果在计算的过程中,没用出现1,则会在计算的过程中,得出某个结果和之前计算的结果一致,成为一个环状。所以最后可以得出,如果有出现1则会进入1的循环,如果没用出现1则一直循环都有1。 这题和判断链表是否有环很像!不过这里只要判断环里面的数字是否是1,所以可以采取判断链表是否有环的方法,使用快慢双指针。定义快慢指针的方法和判断链表循环的双指针方法一样,快指针每次移动两次,慢指针每次移动一次,当二者相遇时,判
2024-03-26 11:35:24
405
原创 Linux进程的管理和进程的状态
程序的一个执行实例 ,正在执行的程序等等 ——— 课本概念担当分配系统资源的实体,例如cpu时间,内存 -----内核的观点。
2024-03-23 14:26:13
809
2
原创 双指针算法_复写零
通过示例和双数组模拟操作的过程,我们可以得出结论,如果使用双指针从左到右进行0的复写,那么势必会覆盖数组原有的元素,所以双指针进行操作的方向必须改变,变成从右到左,从后向前!继续使用双指针的操作,我们将dest定义为最后一个需要复写的位置,当前这里没有找到最后一个需要复写的位置,所以初始位置这里变成-1的位置,cur则是查看是0还是非0让dest向前1步还是两步。cur遇到非0,dest向前一步!同时判断dest是否在数组的末端,不是则cur继续往前走!
2024-03-16 10:20:05
766
21
C++ 类与对象之日期类的创建代码解析
2024-02-21
C++ 类与对象之日期类的创建主要代码
2024-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅