自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计组期末复习

本内容是我在计组期末复习时的记录,可能对你的复习帮助不大。不过里面有我推荐的视频,希望对你有一些帮助……

2024-07-04 11:23:54 464

原创 python基础语法--函数

位置参数(Positional Argument)是指在调用函数时,根据参数在括号内出现的顺序来确定参数值对应哪个形参(形式参数)。换句话说,函数调用时传递的实参(实际参数)是通过它们的位置来匹配到函数定义中的形参。f(2,5,8)重要的是要注意,如果在调用函数时没有按照形参定义的顺序提供位置实参,或者提供的位置实参数目与函数定义不匹配,Python将会抛出错误。总结来说,位置实参使得函数调用时必须保持实参顺序与函数定义中的形参顺序严格一致。

2024-05-01 16:56:38 1000 2

原创 python基础语法--列表

一个元素。如果不指定stop,切片的最后一个元素默认是列表的第一个元素。从索引start开始以step为步长。

2024-04-21 20:27:47 861 1

原创 MySQL -- 视图

视图可以看成是一个窗口,它所反映的是一个表或若干表的局部数据。视图一经定义,用户就可以把它当作表一样来查询数据。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。视图和基本表不同,视图是一个虚表,即视图储存的是查询语句而不是查询结果。

2024-04-19 17:29:02 914

原创 python基础语法--输入和输出

python使用input输入变量,input输入的变量为字符串形式,可以通过其他方式转换为整型或其他类型。

2024-04-07 20:28:54 2656

原创 Linux开发工具

编译器是一种将源代码转换为目标代码的程序。它接受用高级编程语言编写的源代码作为输入,并将其翻译成特定目标平台上的机器代码或中间代码。编译器通常由多个阶段组成,每个阶段负责执行特定的任务,最终生成可执行程序或库文件。以下是编译器通常包括的几个主要阶段:词法分析(Lexical Analysis):也称为扫描器,从左向右,从上往下扫描,负责将源代码转换为词法单元(tokens),如关键字、标识符、常量等。

2024-02-02 14:12:22 917

原创 Linux权限

Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

2024-01-28 21:47:32 937

原创 STL_list

反向迭代器是一种迭代器,它可以在容器中从后向前遍历元素。与正向迭代器不同的是,反向迭代器的++操作符是让迭代器指向前一个元素,--操作符是让迭代器指向后一个元素。反向迭代器通常用于需要从后往前遍历容器的算法和场景中。反向迭代器和正向迭代器在使用上有相似之处,它们都可以通过解引用运算符来访问当前迭代器指向的元素,也可以通过比较运算符来判断迭代器之间的大小关系。但是,它们之间也存在一些区别和联系。区别:步进方向不同:正向迭代器的步进方向是从前向后,而反向迭代器的步进方向是从后向前。

2024-01-26 10:31:03 2198

原创 默认成员函数

1、尽量使用初始化列表初始化,因为不管你是否在初始化列表显式地处理成员变量,成员变量也会被处理。如果没有显式的写:对于自定义类型成员变量,一定会调用它的默认构造函数进行初始化这个自定义对象;对于内置类型默认给随机值或声明时的缺省值。Stack s2;对于这个MyQueue类,我们是不需要写它的构造函数的。

2024-01-24 19:47:02 978

原创 this指针相关

1.this指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。全局函数没有this指针2.当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针。3.当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。4.this指针被隐含地声明为:Class Name* const this,这意味着不能给this指针赋值;

2024-01-21 21:16:12 948

原创 友元、隐式类型转化

友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。友元分为:友元函数和友元类。

2024-01-21 21:15:16 801

原创 vector

总结一下,对于插入和删除操作后的迭代器,我们认为都是失效的,所以在插入和删除后尽量不要在使用这个迭代器了,如果还想使用就需要使用函数返回值来更新迭代器。

2024-01-20 19:33:53 1269

原创 string 模拟实现

1)对于不修改对象的成员的函数时,尽量使用const修饰该函数;2)如果这个函数需要同时满足这两种情况时,就需要使用函数重载:a)在读取数据时我们不希望进行更改成员,要使用const进行修饰该函数;b)如果我们在读的过程中也想要修改时,就不能使用const进行修饰。

2024-01-17 21:25:29 871

原创 运算符重载

运算符重载是指在C++中,可以对已有的运算符赋予新的含义或功能,使得它们能够用于自定义的数据类型或类对象。通过运算符重载,可以使得用户自定义的类型支持与内置类型相似的操作,包括算术运算、逻辑运算、关系运算等。operator是关键字,后面跟着要重载的运算符的符号,然后是参数列表和具体的实现代码。int a = 1;int b = 2;Vector v3;如果,我们要想实现这种效果,就需要自己进行重载,下面我会实现的。

2024-01-11 10:35:37 870

原创 二分查找及其复杂的计算

二分查找,也称为折半查找,是一种高效的搜索算法,用于在有序数组(或有序列表)中查找特定元素的位置。二分查找的基本思想是将待查找的区间不断地二分,然后确定目标元素位于左半部分还是右半部分,从而缩小查找范围。二分查找的时间复杂度为O(log n),其中n表示数组或列表的长度。相比线性查找的O(n)时间复杂度,二分查找的效率更高。但要注意,二分查找要求数组或列表是有序的,否则无法正确进行查找。需要特别注意的是,二分查找适用于静态查找(即不会频繁插入、删除元素)的情况,并且要求查找的数据结构支持随机访问。

2023-12-26 10:14:32 206 2

原创 排序算法讲解

1)排序思想:2)排序代码:3)注意点:4)时间/空间复杂度和稳定性下面的排序是以实现升序讲解的。

2023-12-26 10:09:10 268

原创 中后缀表达式

操作数操作符。

2023-12-26 10:07:58 59

原创 二叉树OJ

这种题型给出的条件一般是以下形式(其中#代表空格,下面我为了方便,我将给出的条件整体用一个数组描述):假设给出的条件是用前序遍历获得的结果,由此构建原先树的思想如下:先来说一下构建树的递归思想,例如构建下面这棵树:将构建整棵树拆分成若干个小问题:整棵树是由根节点1和左右子树组成的,而左子树也是由根节点2和左右子树组成的,右子树也是由根节点3和其左右子树构成的。又因为整棵树最小可以拆分成以4为根节点的树:它的左子树是空,这也就意味着左边不会再向下构建子树了(4的左子树构建完成);

2023-09-24 16:34:54 130 4

原创 Heap及其应用

与之前的栈和队列一样,堆是一种特殊的数据结构,用于存储和组织数据,它是一种根据特定规则进行插入和删除操作的动态数据结构。堆通常是一个二叉树,其中每个节点都有一个与之关联的值。

2023-09-16 20:49:03 181 1

原创 HJ31 单词倒排 题解

'\0',条件为真,进入循环:判断空格是否为字母字符--不是字母字符执行 *move = '\0';这样,在跳过最后一个单词 student 时,指针指向 ’\0‘,跳出循环,执行continue使下一步:*move = ’\0‘;定义一个字符指针数组,用于保存每个单词的起始字符地址,接下来将非字母字符全部替换成为字符串结尾标志'\0',则单词字符字母遇到结尾就结束了,相当于把一个字符串以非字母字符进行切割成为了多个字符串,最终对字符指针数组进行逆序打印每个单词即可。

2023-08-24 18:05:06 326 5

原创 取模运算符在数组下标的应用

注意:取模运算符两侧的除数和被除数都是整数,不能是小数。如果你将小数带入运算,编译器可能会出现以下报错,例如 1% 0.5 :想要很好地利用%,我们就先要了解一下取模运算符的运算性质:根据取模运算的运算性质,模运算结果的范围是 0 ~ (除数-1)。反过来就是,如果你想将数据控制在 0 ~ x ,你就可以 %(x+1)。我们想要获取当前下标的前一个时,可能会出现这两种种情况:当前下标是第一个下标时,那么它对应的前一个数据就是下标为末尾的元素;其他情况下,可以直接用当前下标-1来获得前一个元素。例如,当前下标

2023-08-23 09:26:03 410 5

原创 448. 找到所有数组中消失的数字 题解

综合来看,两种方法的时间复杂度都是相同的,都为 O(n),但是方法一需要额外的哈希集合来存储数据,导致空间复杂度为 O(n),而方法二在原地修改数组,空间复杂度为 O(1)。,比如 0 号位置是 3 ,则把 3 号位置的数据重置为负值,等到数组遍历重置完毕,只有缺失的这个数字对应的位置保留正数,其他出现过的数字位置都会是负数, 要注意不要重复设置负数,因为负负得正。2号元素是-3,绝对值为3,将2号位置为负值,但是2号位已经重置过,不需要重置,否则会变正数[2, -3, -3, 2, 4]

2023-08-21 15:50:06 112 1

原创 求一个有符号整数二进制补码中1的个数

这种方法通过不断地将整数右移,同时检查最低位的值来统计其中的1的个数。

2023-08-21 15:49:47 104

原创 728. 自除数 题解

利用取余操作符获得一个数的每一位,再用这个数除以获得每一个位,如果有一位不能被整除,这个数就不是自除数;为0时,应该跳过检查,因为整数除以0是非法的操作。循环中使用另一个变量来保存数字的副本,而不是直接修改循环变量。为0时,会导致整数除以0的异常,因此需要在判断条件中加入。所以,在判断是否是自除数的部分,应该将条件改为。在内层循环中被改变,进而影响了外层的循环。是指可以被它包含的每一位数整除的数。,这样可以避免出现除以0的异常情况。的判断,以避免出现除以0的情况。这个错误的原因是,我在。

2023-08-20 16:12:55 83

原创 238. 除自身以外数组的乘积 题解

另一方面,就算可以使用除法,除法也不能解决问题,当我们遇到这种情况时: int nums[] = {0, 2, 3, 4},利用这种方法,算得的所有乘积结果是0,那么nums中第一个对应的答案是0/0,但其实nums中第一个对应的答案应该是2*3*4,并且0不能作为除数。第1个元素的右边乘积, arr[1] *= right 然后计算第0位右侧乘积,right*=nums[1] -> right =1*4*3。在计算左侧乘积时,如果是最左侧(第一个)的数字 ,因其左侧没有数字,该位置的左侧乘积就是1;

2023-08-20 15:55:26 175

原创 约瑟夫占位问题

面试题中的考查:其实这个就是一个约瑟夫问题,下面通过讲解你会很好的解决这道题目。据说在罗马帝国时期,一群犹太士兵被罗马人包围,为了不当罗马人的俘虏,犹太士兵们决定集体自杀,自杀的方式是所有人围成一个圈,第一个士兵会杀掉他左面的第二个士兵,同样,第三个士兵杀掉第四个士兵……以此类推,知道最后只剩下一个人,然后他再自杀。犹太士兵里有个人叫约瑟夫,他想投降保命但又不敢明说,那么约瑟夫应该站在那个位置才能够活下来?

2023-08-20 08:16:35 182 1

原创 169. 多数元素(摩尔投票法) 题解

遍历完数组后,得到的候选元素可能是多数元素,但也可能不是。为了验证候选元素是否确实是多数元素,再次遍历整个数组,统计候选元素的实际出现次数。如果候选元素的实际出现次数大于数组长度的一半(即超过 ⌊ n/2 ⌋ 次),则该候选元素可以被确认为多数元素;在每次计数减到0时,说明之前的候选元素和其他元素抵消掉了,需要选择新的候选元素。实际上,数组中没有出现次数超过一半的元素,因此摩尔投票算法无法在这种情况下找到多数元素。在摩尔投票算法的应用中,验证是确保算法正确性的重要一步,尤其是在出现没有多数元素的情况下。

2023-08-18 14:46:12 86

原创 用队列实现栈

可能我们创建的队列都进行入队操作(调用了 QueuePush() 函数),所以两队列都有malloc开辟的空间,虽然有一个队列中没有元素,但是空队列也的空间还是存在的,所以也要进行free,我们可以直接利用 QueueDestroy() 函数来释放队列的空间;因为在函数内部开辟一个栈空间后,出了函数这块空间就会被销毁,所以我们应该在函数内部开辟一块出了函数不会被销毁的空间给栈。注:栈和队列的入数据本质都是进行尾插,两者的操作都是一样的,所以入数据函数也是可以通用的不需要在进行额外的操作。

2023-08-17 15:23:12 91 1

原创 辨析 :“在C程序中,函数调用不能出现在表达式语句中”

操作数可以是变量、常量、函数调用、字面量等,而操作符用于执行特定的操作,例如加法、减法、乘法、除法、逻辑比较等。在上面的例子中,我们尝试在一个表达式语句中使用了函数调用的返回值,但是这个返回值并没有被赋值给变量或者在表达式中使用。,但这种用法通常是不推荐的,因为它容易引起误解,增加代码的复杂性,同时也可能导致编译器警告或错误。最好的做法是确保函数调用的返回值要么被赋值给变量,要么在表达式中使用。函数调用作为表达式,会产生一个值,但是在表达式语句中,这个值会被忽略,因此这种用法是无效的。本次内容到此结束了!

2023-08-16 10:59:05 2021

原创 349. 两个数组的交集 题解

时间复杂度:O(m + n),其中 m 是nums1的长度,n 是nums2的长度。创建哈希集合需要 O(m) 的时间,因为需要将nums1中的元素加入集合。遍历nums2并检查元素是否在哈希集合中需要 O(n) 的时间。最终的结果遍历需要 O(min(m, n)) 的时间,其中 min(m, n) 是结果数组的长度。空间复杂度:O(m) 或 O(n),取决于nums1数组的大小。哈希集合需要存储nums1中的元素,因此需要 O(m) 的额外空间。

2023-08-16 10:58:49 190 2

原创 20. 有效的括号 题解

②如果情况是:'(', '{', '}',')', ']'-->当遇到右括号‘]’时,栈中没有元素,栈为空,但是栈所用的空间没有free,此时如果没有free直接返回,就会造成内存泄漏。栈(Stack)是一个非常适合这个问题的数据结构,因为它遵循"后进先出"(Last In First Out,LIFO)的原则,与括号的嵌套结构相符。①'[', '(', '{', '}',')' 当右括号 '}',')' 都匹配完后,栈中还剩下'[',则说明'['没有右括号与其匹配;本次内容到此结束了!

2023-08-15 10:35:01 139 1

原创 链表中倒数第k个结点 题解

本次内容到此结束了!输入一个链表,输出该链表中倒数第k个结点。

2023-08-11 07:59:15 71 1

原创 合并两个有序链表 题解

本次内容到此结束了!注:这里尾插的的时候可以不进行创建新的节点,可以直接用原链表的节点进行连接即可。新链表是通过拼接给定的两个链表的所有节点组成的。如果current1的数值小于或等于current2。如果current1的数值大于current2。显然这种方法更好,但其思路是一模一样的。如果current1指向NULL。如果current2指向NULL。将两个升序链表合并为一个新的。

2023-08-11 07:59:04 60 1

原创 CM11 链表分割 题解

给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。本次内容到此结束了!注:这里尾插的的时候可以不进行创建新的节点,可以直接用原链表的节点进行连接即可。显然这种方法更好,但其思路是一模一样的。现有一链表的头指针 ListNode*如果current节点的值大于、等于x。如果current节点的值小于x。

2023-08-11 07:58:44 66

原创 160. 相交链表 题解

注:本题中链表相交是“Y”型的,而不是“X”型的,因为本题是单链表,每一个节点中只有一个指针域,也就意味着一个节点只能指向一个节点。本次内容到此结束了!,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回。给你两个单链表的头节点。

2023-08-11 07:58:29 72

原创 138. 复制带随机指针的链表(深拷贝)题解

在这一步中,我们会遍历原链表,并为每个节点创建一个新的节点,然后将新节点插入到原节点之后-->插入时可以采用先用新节点的next指向current的next,在用current的next指向新节点,最后再将current移动到新节点的next;如果原节点的随机指针不为空,那么新节点的随机指针应该指向原节点随机指针指向的新节点(原节点的下一个节点);指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。

2023-08-11 07:58:16 61

原创 OR36 链表的回文结构 题解

本次内容到此结束了!对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。1->2->2->1 返回:true。给定一个链表的头指针。

2023-08-10 15:14:52 93

原创 判断一个数是否是回文数 题解

反转数字:使用一个循环,每次从原始数字中取出末位数字,然后将反转后的数字乘以10并加上取出的末位数字。本次内容到此结束了!负数不可能是回文数,因此如果输入的数字为负数,直接返回。将反转后的数字与原始数字进行比较:如果它们相等,说明输入的数字是回文数,返回。返回结果:如果循环结束后没有发现不相等的情况,说明输入的数字是回文数,返回。或类似的函数,将输入的数字转换为字符串。位是否相等,如果有不相等的情况,说明该数字不是回文数,返回。初始化反转后的数字为0,原始数字为要判断是否是回文数的数字。

2023-08-10 15:13:12 261

原创 203. 移除链表元素题解

本次内容到此结束了!注:本题解题思路并不难,只需要注意特殊情况即可。,请你删除链表中所有满足。给你一个链表的头节点。

2023-08-09 08:14:04 46

原创 链表的中间结点 题解

利用快慢指针:当快指针一次移动两个节点、慢指针一次移动一个节点,当移动次数相同,快指针移动的距离是慢指针移动距离的二倍,所以当快指针移动到链表末尾时,慢指针刚好移动到链表的中间节点。本次内容到此结束了!如果有两个中间结点,则返回第二个中间结点。,请你找出并返回链表的中间结点。

2023-08-09 08:13:36 41

空空如也

空空如也

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

TA关注的人

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