自定义博客皮肤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)
  • 收藏
  • 关注

原创 C++--哈希

哈希是一种通过哈希函数建立关键字与存储位置映射关系的数据组织方式,可实现快速查找。关键概念包括负载因子(衡量空间利用率与冲突概率)、哈希函数设计原则(如直接定址法、除留余数法等)以及哈希冲突解决方法(闭散列的线性/二次探测和开散列的链地址法)。闭散列通过探测空位解决冲突,而开散列通过链表链接冲突元素。文中还探讨了不同哈希函数的适用场景及其优缺点,强调设计高效哈希函数以减少冲突的重要性。

2025-07-15 19:15:35 172

原创 C++--unordered_set和unordered_map的使用

Key 就是 unordered_set 底层关键字的类型。unordered_set 默认要求 Key 支持转换为整形,如果不支持或者想按自己的需求实现可以将 Key 转成整形的哈希函数传给第二个模板参数。unordered_set 默认要求 Key 支持比较相等,如果不支持或者想按自己的需求实现可以将 Key 比较相等的函数传给第三个模板参数。unordered_set 底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第四个参数。

2025-07-13 22:57:09 621

原创 C++--红黑树封装实现set和map

为了让 end() 能够指向最右节点的下一个节点, stl 源码中增加了一个哨兵位的头结点,该节点的 left 指向这棵树的最左节点,也就是 begin(),right 指向这棵树的最右节点,parent 指向 nullptr,然后让根的父节点指向它,最右节点的 right 也指向它,所以在 stl 源码的实现中这个哨兵位头结点就是 end()。如图:it指向11,11右为空,11是8的右,11所在子树访问完了,8所在子树也访问完了,继续往上找,8是13的左,那么下一个访问的结点就是13。

2025-07-13 20:41:23 731 1

原创 牛客 OR36.链表的回文结构

题目描述:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。创建新的数组,遍历原链表,将链表节点中的值放入数组,在数组中判断是否为回文结构。,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。给定一个链表的头指针。

2025-07-11 15:40:05 321

原创 C++--红黑树

红黑树是一种平衡二叉搜索树,但和 AVL 树使用高度来控制平衡不同,红黑树在每个结点上增加一个存储位来表示结点的颜色,可以是Red或Black,然后通过对任何一条从根到叶子的路径上各个结点着色方式的限制来达到接近平衡。红黑树通过对每个节点颜色的限制,从而使得整棵树的最长路径不超过最短路径的两倍 (注意是整棵树,对子树没有要求),这样红黑树就可以达到接近平衡。注意:因为红黑树只要求整棵树中最长路径是最短路径的两倍,所以红黑树是近似平衡的,即子树中某一路径可能比另一条路径长两倍不止;

2025-07-11 15:39:08 1371

原创 牛客 CM11.链表分割

给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。题目描述:现有一链表的头指针 ListNode*

2025-07-10 19:06:30 209

原创 C++--异常

实际上很多公司都会自定义自己的异常体系统进行异常管理。公司中的项目一般会进行模块划分,让不同的程序模块或小程序完成不同的模块,如果不对抛出异常事件进行规划,那么负责模块层抛出异常的程序员将无法知道因为需要抛出各类型的异常。因此实际公司定义了一套集中的规范体系,首先定义一个最基础的异常类,所有人抛出的异常都必须继承该类异常的最低类型,因为异常处理可以仅基类异常抛出的最低类型异常,因此最基础类的异常类型就抛出了。

2025-07-10 19:05:18 654

原创 LeetCode 21. 合并两个有序链表

以上代码中在插入 l1 和 l2 的时候分链表为空和不为空的代码十分冗余,可以先通过malloc 为链表分配一个哨兵位就可以解决这个问题,最后再将哨兵位给释放掉即可。新链表是通过拼接给定的两个链表的所有节点组成的。题目描述:将两个升序链表合并为一个新的。

2025-07-08 17:19:33 252

原创 C++--AVL树

在前面学习二叉搜索树时提到,二叉搜索树的查找效率为 O(N),因为当数据有序或接近有序时,构建出来的二叉搜索树是单分支或接近单分支的结构,此时树的高度接近 n,所以最坏情况下二叉搜索树的查找效率为 O(N)。为了应对上面这种情况,两位俄罗斯的数学家 G.M.Adelson-Velskii 和 E.M.Landis 在1962年提出了一种解决办法,当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1 (需要对树中的结点进行调整来实现),即可降低树的高度,从而减少平均搜索长度。

2025-07-08 17:18:15 1152

原创 LeetCode 面试题 02.02. 返回倒数第 k 个节点

题目描述:实现一种算法,找出单向链表中倒数第 k 个节点。

2025-07-07 20:11:11 168

原创 C++--map和set的使用

set 是按照一定次序存储元素的容器,其底层是一棵平衡二叉搜索树 (红黑树),由于二叉搜索树的每个节点的值满足左孩子 < 根 < 右孩子,并且二叉搜索树中没有重复的节点,所以 set 可以用来排序、去重和查找,同时由于这是一棵平衡树,所以 set 查找的时间复杂度为 O(logN),效率非常高。同时,set 是一种 key 模型 的容器,也就是说,set 中只有键值 key,而没有对应的 value,并且每个 key 都是唯一的。

2025-07-07 20:09:53 1182

原创 LeetCode 876. 链表的中间结点

当你遇到一个链表问题时,可以问自己以下几个问题来判断是否适用快慢指针:我是不是在寻找一个特殊位置的节点,而不是特定值的节点?这个问题能否通过两个指针的“追及”或“相对距离”来解决?我能否通过让一个指针比另一个走得快,或者先走几步,来创造出解决问题的有利条件?如果答案是肯定的,那么快慢指针很可能就是解决问题的金钥匙。

2025-07-06 09:08:18 145

原创 C++--二叉搜索树

给一个单词word,判断该单词是否拼写正确,可以将 K 的类型定义为 string,然后将英语词库中的所有单词作为 key,构建一颗二叉搜索树,然后在二叉搜索树中对用户写出的每一个单词进行查找,如果找不到,则说明该单词拼写错误。那么这样的效率显然是无法满足需求的,后面需要继续了解二叉搜索树的变形,平衡二叉搜索树AVL树和红黑树,才会适用在内存中存储和搜索数据。,通过英文可以快速找到与其对应的中文,英文单词与其对应的中文 <word, chinese> 就构成一种键值对;

2025-07-06 09:05:44 1131

原创 LeetCode 206. 反转链表

*注意:**这个解法仍有内存泄漏的问题,因为就链表的内存没有办法释放。,请你反转链表,并返回反转后的链表。: 指向当前需要反转的节点,初始为。题目描述:给你单链表的头节点。的下一个节点,防止链表断裂。: 指向前一个节点,初始为。遍历链表,对于每个节点。

2025-07-04 23:51:02 256

原创 C++--多态

下面所提及的多态都是运行时多态(动态多态)。以下程序输出结果是什么( )A: A->0 B: B->1 C: A->1 D: B->0 E: 编译出错 F: 以上都不准确class Apublic:public:p->test();return 0;在主函数中首先观察到**创建了一个子类指针p用来指向一个子类对象B**,然后通过p调用父类的test()函数。这里可以看到test函数中调用了func函数,但是这里是由this去调用的func。

2025-07-04 23:47:27 1154

原创 C++--继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前接触的复用都是函数复用,而继承便是类设计层次的复用。下面在没有学习到继承之前设计了两个类Student和TeacherStudent和Teacher都有姓名、年龄等成员变量,都有Print这个成员函数,然而这些内容在这两个类中是重复出现的,设计到两个类里面就是冗余的。

2025-07-01 13:43:39 745

原创 C++--模版进阶

本文介绍了C++模板的进阶应用,主要包括非类型模板参数、模板特化和分离编译。非类型模板参数允许使用常量作为模板参数,类似宏定义但更灵活。模板特化分为函数模板特化和类模板特化,其中类模板特化又分为全特化和偏特化,用于处理特殊类型的情况。分离编译模式下,模板的声明和定义通常需要放在同一文件中以避免链接错误。文章通过示例代码展示了这些概念的具体应用,帮助读者更好地理解和使用C++模板的高级特性。

2025-06-11 00:22:45 960

原创 C++--stack和queue的使用及其模拟实现

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。Java 语言非常关注设计模式,而 C++ 并没有太关注,但是一些常见的设计模式还是要学习。迭代器模式其实在前面学习stringvector和list时就已经接触过设计模式了。迭代器就是一种设计模式。迭代器模式是封装后提供统一的接口iterator在不暴露底层实现细节的情况下,使得上层能够以相同的方式来访问不同的容器。适配器模式适配器模式则是将一个类的接口转换成客户希望的另外一个接口,即根据已有的东西转换出想要的东西。

2025-06-09 20:59:57 835

原创 C++--list的使用及其模拟实现

可以看到,list sort 的效率远低于 vector sort,甚至于说,直接使用 list sort 的效率都不如先将数据拷贝到 vector 中,然后使用 vector sort,排序之后再将数据拷贝回 list 中快。至此也能明白为什么 list sort 接口使用的非常少了。**注意:**在 release 版本下测试软件或算法性能得到的结果要比在 debug 版本下得到的结果具有参考意义。

2025-06-07 21:16:40 807

原创 C++--vector的使用及其模拟实现

迭代器失效一定会导致错误,所以在平时使用迭代器的时候为了保证程序的跨平台性,统一认为迭代器失效之后,必须更新后才能再次使用。

2025-06-04 22:24:36 699

原创 C++--string的使用及其模拟实现

C++中的string类简介 C++标准库提供的string类解决了C语言字符串操作中的诸多问题,如内存管理、边界检查等,并遵循面向对象思想。string本质上是一个模板类basic_string<char>,支持多种编码方式。 VS和g++编译器对string的实现不同:VS采用固定16字节小缓冲区优化,以空间换时间;g++则使用写时拷贝技术提高效率。string类提供了丰富的接口,包括构造函数、迭代器、运算符重载等。 C++11引入的auto关键字和范围for循环简化了string的遍历操作

2025-05-30 11:06:21 1023

原创 C++--STL简介

STL(标准模板库)是C++标准库的核心部分,提供了一系列可复用的数据结构和算法框架。STL起源于惠普实验室的原始版本,随后衍生出多个版本,如P.J.版本、RW版本和SGI版本,其中SGI版本因其可移植性和高可读性被广泛采用。STL包含六大组件,极大地简化了C++编程,避免了重复造轮子,提升了开发效率。由于其重要性,STL在C++学习、面试和实际工作中都是重点考察内容,掌握STL是C++程序员的基本要求。

2025-05-20 23:18:01 292

原创 C++--模版初阶

在C++中,存在这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码)。泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。函数模版类模版。

2025-05-20 23:16:53 1414

原创 C++--内存管理

C++动态内存管理和C语言动态内存管理最大的不同在于二者对自定义类型的处理:C语言 malloc/calloc/realloc 函数只负责开辟空间,free 函数只负责销毁空间。而C++在申请自定义类型的空间时,new 会调用构造函数,delete 会调用析构函数,完成对应对象的初始化和销毁。class Apublic://构造函数: _a(a)cout << "A 构造" << this << endl;//析构函数~A()cout << "A 析构" << this << endl;

2025-05-19 23:16:32 729

原创 C++--类和对象

class 为定义类的关键字,className为类的名字(由程序员自行决定)同样也是类的类型,{} 中为类的主体,注意类定义结束时后面分号不能省略。类体中的成员称为类的成员:类中的变量称为属性或成员变量;类中的函数称为方法或成员函数。//类体:由成员变量和成员函数组成 };//注意后面的分号为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如成员变量前面或后面加 m 开头,注意 C++ 中这个并不是强制的,只是一些惯例,要看具体的要求。

2025-05-18 15:01:30 563

原创 LeetCode 27.移除元素

这中方法虽然简单易懂,但仍然后很多小细节需要注意。而且这种方法并不能通过leetcode的平台测试,因为其空间复杂度为ON2O(N^2)ON2,超出了时间限制不合符题意。双指针法是一种非常常见的算法技巧,特别适用于处理数组、链表或字符串等序列结构的问题,尤其是涉及到原地修改或者查找特定条件的元素对时。

2025-05-05 23:45:04 594

原创 Linux系统编程--基础指令(!!详细讲解+知识拓展)

使用特定的算法,将文件进行合并或者压缩,减少体积。实际上打包压缩是两个动作,但是可以看做是一个整体。

2025-05-05 21:48:04 1076

原创 C++--入门基础

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间内的变量/函数/类等。命名空间中可以定义变量/函数/类等。namespace只能定义在全局,当然还可以嵌套定义。namespace后面的空间名不受限制,可以随机取,一般取项目名称作为空间名。//定义命名空间//定义变量//定义函数//定义类型(结构体)int data;}SLNode;//定义命名空间namespace N1//定义一个名为N1的命名空间//定义变量。

2025-05-02 22:58:09 2072

原创 LeetCode 189.轮转数组

以上两组代码的代码逻辑基本一致,主要是在将数据移动到新数组时的具体实现思路不同。输入: nums = [1,2,3,4,5,6,7], k = 3。输入: nums = [-1,-100,3,99], k = 2。向右轮转 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]**结果:**不通过,时间复杂度过高,为。输出: [5,6,7,1,2,3,4]

2025-04-29 13:39:28 456

原创 初阶数据结构--排序算法(全解析!!!)

希尔排序是按其设计者希尔的名字命名的,该算法由希尔1959年公布。

2025-04-23 21:34:24 1210

原创 机器视觉--Python补充知识

编程中,经常需要使用变量,来保存/表示数据。如果代码中需要表示的数据个数比较少,直接创建多个变量即可。num1 = 10num2 = 20num3 = 30......但是有的时候,代码中需要表示的数据特别多,甚至也不知道要表示多少个数据。这个时候, 就需要用到列表。列表是一种让程序员在代码中批量表示/保存数据的方式就像去超市买辣条, 如果就只是买一两根辣条,那直接拿着辣条就走了。但是如果一次买个十根八根的,这个时候用手拿就不好拿,超市老板就会给我们个袋子。这个袋子,就相当于列表。

2025-04-17 22:00:56 926

原创 初阶数据结构--二叉树OJ训练

本文内容承接上篇问文章,建议连续阅读。

2025-04-14 11:03:53 748

原创 初阶数据结构--链式二叉树

以上递归思路都是先遍历左子树在遍历右子树,采用的主要是左根右的中序遍历思想。上述代码中对于左子树和右子树的遍历,并不是一次性将根结点的左子树遍历完成再遍历右子树,而是针对每一个节点都是先遍历左子树再遍历右子树。(中序遍历的重要思想注意!!注意!!除了先序遍历、中序遍历、后序遍历外,还可以对二叉树过进行层序遍历。设二叉树的根结点所在层数为1,层序遍历就是从所在二叉树的根结点出发,首先访问第-一层的树根结点,然后从左到右访问第2层上的结点,接着是第三层的结点,以此类推,自上而下,自左至右逐层访问。

2025-04-12 15:00:06 808

原创 初阶数据结构--树

在文件系统中,树结构被广泛应用,它通过父结点和子结点之间的关关系来表示不同层级的文件和文件夹之间的关联。(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。在树形结构中,最常⽤的就是⼆叉树,⼀棵⼆叉树是结点的⼀个有限集合,该集合由⼀个根结点加上两棵别称为左⼦树和右⼦树的⼆叉树组成或者为空。:若一个结点含有子结点,则这个结点称为其子结点的父结点。:一个结点含有的子树的根结点称为该结点的子结点。

2025-04-05 19:29:18 944

原创 机器视觉--Python语法结构

条件语句能够表达 “如果 … 否则 …” 这样的语义, 这构成了计算机中基础的逻辑判定。条件语句也叫做分支语句如果 我认真敲代码我就很容易找到工作否则我就容易毕业就失业其中 “我认真敲代码” 称为条件。如果条件成立(条件为真), 则会出现 “我就很容易找到工作” 这个情况。如果条件不成立(条件为假), 则会出现 “我就容易毕业就失业”.当然, 同样的逻辑, 还可以反着表达。如果 我选择躺平摆烂我就容易毕业就失业否则我就很容易找到工作虽然结构变了, 但是整体表达的语义是等价的。

2025-04-04 22:06:26 810

原创 机器视觉--python基础语法

给定四个分数, 67.5, 89.0, 12.9, 32.2 , 编写代码, 求这四个分数的方差PS: 方差的计算过程: 取每一项, 减去平均值, 计算平方, 再求和, 最后除以 (项数 - 1)在这个代码中,需要先计算四个数的平均值再计算方差,所以就需要一个变量保存平均数。注意avg, total, result 均为变量.** 在 Python 中表示乘方运算. ** 2 即为求平方变量可以视为是一块能够容纳数据的空间。这个空间往往对应到 “内存” 这样的硬件设备上a = 10。

2025-04-02 22:17:19 1508 1

原创 视觉入门--Python入门

这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

2025-04-02 03:32:02 341

原创 计算机三级网络技术大题总结

做题口决: 网络位不变,主机位全部变为 0。例题: IP 地址为: 125.175.20.7,子网掩码为: 255.224.0.0将其 IP 地址和子网掩码转换为二进制得如下:其中子网掩码为 1 对应的二进制位为网络位,子网掩码为 0 对应的位为主机位。位与主机位。可以看出 是网络位,而 是主机位。 因此此网络地址为: ,转换为十进制为: 125.160.0.0小技巧:通过观察可以看出,子网掩码为 255 转换为二进制为。因此当子网掩码为 255 时,所在对应段为网络位。 同理,子网掩码为 0 时对应的

2025-03-28 19:42:35 1147

原创 计算机三级网络技术知识汇总【11】

管理站(Manager)通过 SNMP 定义的 PDU 向代理(Agent)发出请求,而 Agent 将得到的 MIB 值通过 SNMP协议传送给 Manager。SNMP 模型的定义比较简单,并不在每层都定义有管理实体,只在 TCP/IP 协议层上进行定义。

2025-03-22 15:46:58 822

原创 计算机三级网络技术知识汇总【10】

配置 1:Pix525(config)#conduit permit tcp host 192.168.0.3 eq www any含义:配置允许任何外部主机对全局地址 192.168.0.3 的这台主机进行 HTTP 访问。fixup:配置 FIXUP 协议。fixup 命令的作用是启用、禁止、改变一个服务或协议勇敢 PIX 防火墙的端口,由 fixup 命令指定的端口是 PIX。

2025-03-21 17:20:37 1028

空空如也

空空如也

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

TA关注的人

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