自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二分查找模版

终止时返回l,拿这个案例序列走一遍找8,最后l和r都指向下标3处的8,此时,l=3,r=3,mid=3 然后更新r=mid-1=2 l>r 跳出循环 结果就是l或 r+1 返回3,再比如找3,会发现r不断更新r=1,-1 跳出循环。初始化左右指针l=0 r=n-1 猜测区间 [l,r] 闭区间,mid=(l+r)/2 防溢出就写成 mid=l+(r-l)/2。否则就是nums[mid]>=target [mid,r]这个区间的数都大于等于target 更新r=mid-1;

2023-10-04 22:06:43 482

原创 protobuf学习

1 ~ 536,870,911 (2^29 - 1) ,其中 19000 ~ 19999 不可⽤,为预留标识号,如果设置了这些编号,编译会报警,1~15只需一个字节进行编码,16 ~ 2047 内的数字需要两个字节进⾏编码。• 序列化的 API 函数均为const成员函数,因为序列化不会改变类对象的内容, ⽽是将序列化的结果保存到函数⼊参指定的地址中。存在,但已经被删除或注释掉的字段编号。• 以上三种序列化的⽅法没有本质上的区别,只是序列化后输出的格式不同,可以供不同的应⽤场景。

2023-07-23 22:28:43 298

原创 分布式版本控制工具git学习

git安装 卸载创建本地仓库[–global][–global]可选项 --global 设置全局的设置是否使用了 --global 要和删除时一一对应工作区修改提交到暂存区暂存区修改提交的本地仓库查看 commit 记录查看commit精简版记录查看就是我们的暂存区,add 后的内容都是添加到这⾥的就是我们的默认指向 master 分⽀的指针,⾥⾯包含了创建的各种版本库对象及内容。

2023-07-20 14:46:35 302

原创 docker使用学习

docker 容器使用操作练习,综合案例操作。

2023-07-13 01:49:03 455

原创 C++14新特性

先补充说明什么是constexpr函数constexpr函数是一种特殊的函数,在编译时求值,并且可以用于计算常量表达式。在C++11标准中引入了constexpr关键字,它用于声明函数是一个常量表达式函数编译时求值:constexpr函数在编译时进行求值,而不是在运行时。这使得编译器能够在编译阶段计算出函数的结果,并将其用于编译时优化。常量表达式:constexpr函数的参数和返回值必须是可用于常量表达式的类型。也就是说,参数和返回值类型必须是字面类型(literal type)。

2023-07-07 14:12:13 179

原创 可视化库seaborn常用操作介绍

sns.jointplot(x,y,data=None,kind=‘scatter’,color=None,size=None,ratio=5,space=0.2,dropna=True) 是 seaborn 库提供的一个函数,用于绘制两个变量之间的关系,并同时显示它们的一维分布。在seaborn中,set()函数是一个非常常见的函数,它可以用来设置不同的seaborn图表的外观。x_estimator:在概率密度图上使用的x轴值的中心估计值函数,主要用于产生一个更加平滑的线条,比如kdeplot。

2023-05-28 22:09:22 1706

原创 python绘图工具matpoltlib的常用操作

Matplotlib 是一个用 Python 编程语言编写的、基于 NumPy 的开源数据可视化库。它提供了一套完整的兼容 MATLAB 的 API,支持各种常用的二维数据可视化、三维数据可视化以及动画制作等功能,能够轻松生成高质量的数据图表和图形。下面主要介绍其中的pyplot的常用绘图操作。常用的线条样式字符类型字符类型'-'实线'--'虚线'-.'虚点线':'点线'.'点','像素点'o'圆点'v'下三角点'^'上三角点''右三角点'1'下三叉点'2'上三叉点'3'左三叉点。

2023-05-28 00:18:52 1466

原创 pandas库的常用操作介绍

Python的pandas库是一个数据处理和数据分析库,提供了很多强大的数据结构和处理工具,使得数据处理更加高效,同时也提供了丰富的功能和灵活的接口。pandas的两个核心数据结构是Series和DataFrame。Series是一个一维数组,可以保存任何数据类型,而DataFrame则是一个表格型数据结构,它包含了一系列的行和列,每列是Series类型。pandas提供了很多数据分析和处理工具,例如各种形式的数据清洗、数据过滤、数据筛选、数据分组、数据合并、数据重塑、时间序列数据处理、统计分析等。

2023-05-27 17:48:45 883

原创 科学计算库Numpy快速入门

NumPy 是 Python 中的一个开源数学库,提供了快速且便捷的数组处理功能,可以用来进行科学计算、数据分析、算法开发等多种任务。NumPy 是 Python 科学计算生态系统的核心组件之一,与众多科学计算相关的库都依赖NumPy。如果你想在 Python 中进行科学计算,那么必须掌握 NumPy 的使用。导入numpy普通数组list可以看出list不能和数值变量进行运算numpy中的数组类型是ndarray。

2023-05-02 18:22:28 703

原创 图的相关知识总结

图是有顶点集合以及顶点间的关系组成的一种数据结构:G=(V,E),其中顶点集合V是有穷非空集合;E={(x,y)|x,y属于V}或者E={|x,y属于V&&Path(x,y)}是顶点间关系的有穷集合,也叫做边的集合。==(x,y)==表示x到y的一条双向通路,即(x,y)是无方向的;==Path(x,y)==表示从x到y的一条单向通路,即Path(x,y)是有方向的。第i个顶点记作vi 。vi和vj相关联表示两点间有一条边 第k条边表示ek,ek=(vi,vj)或。有向图和无向图,

2023-04-24 17:11:38 455

原创 并查集学习

使用数组来表示种群非常方便且好理解,初始时数组中每个个体就是用下标表示,下标处存储的值就是它的父节点,也就是一个种群的,规定存储的值如果为负数,那么该下标个体就代表一个群,且绝对值就是这个群的个体数,所以数组初始化都为-1,就是每个个体都表示一个群,数量就是一个即它自己,然后我们在根据场景合并群。有十个人 0-9 开始各自为群,我们分成三个群s1{0,6,7,8} s2{1,4,9} s3{2,3,5}可以继续合并群体,就是它一个群体下标处的值,修改成另一个群体的下标,然后把那个群体的数量更新一下。

2023-04-23 15:42:53 60

原创 跳表的实现

skiplist本质也是一种查找结构,和搜索树、哈希表一样可以作为key或者key/value模型的查找结构,从命名可以看出它也是一个链表结构,链表的查找效率是O(n),作为在链表基础上优化的一种查找结构,跳表的查找的平均时间复杂度是O(logn),跳表是在有序链表的基础上发展起来的。优化的思路如下:假如我们每相邻两个节点升高一层,增加一个指针,让指针指向下下个节点,如下图b所示。这 样所有新增加的指针连成了一个新的链表,但它包含的节点个数只有原来的一半。

2023-04-23 14:56:58 473

原创 KMP字符串匹配算法详解

KMP算法详解

2023-04-23 01:43:02 456

原创 自主实现Boost库官网站内搜索引擎

我们学习C++或许会用到Boost这样非常成熟的第三方库,所以时常回去Boost官网看文档,但我们发现官网是没有站内搜索功能的,所以我们的项目就是为Boost官网设计一个搜索引擎,实现对一部分文档的搜索功能,,就如同大型的搜索引擎如百度一样,我们都是在搜索框中输入搜索关键字,点击搜索,就会展示搜索结果给我们,一般搜索会有很多结果,每个结果都是标题、摘要和链接,百度搜索的效果如下图我们点击标题就可以跳转到我们想去的页面了。

2023-03-06 20:56:01 186

原创 【负载均衡式的在线oj项目总结(二)

负载均衡式在线oj下部曲

2022-10-15 16:35:40 516 1

原创 【负载均衡式的在线oj项目总结(一)

负载均衡式在线oj

2022-10-13 23:31:33 968 1

原创 C++11特性——lambda表达式

C++11前的可调用对象有函数指针,函数对象(仿函数)C++11增加了lambda表达式。

2022-06-27 15:31:44 655

原创 C++11特性:大括号初始化、右值引用和移动语义

目录1. 统一的列表初始化2. 右值引用和移动语义2.1右值引用的详细讲解2.2右值引用中move的使用2.3完美转发

2022-06-26 12:11:11 2405

原创 unordered_map和unordered_set的简易实现

unordered_map和unordered_set的底层剖析

2022-06-12 21:16:24 186

原创 哈希概念讲解及哈希表简单实现

剖析哈希思想,哈希基础学习。

2022-06-12 17:08:08 319

原创 map和set的模拟实现

在实现了红黑树后,我们就可以着手实现一个简易版的map和set了,在粗略地看了一下源码后,发现,map和set底层是使用同一份红黑树的代码,set是K结构,只需要一个模板参数,map是K-V结构需要两个模板参数,如何做到共用一份红黑树代码创建的红黑树来存储数据呢?源码中的红黑树模板参数如下template<class K,class T,class KofT>红黑树的节点结构enum color{ Red, Black};template<class T>str

2022-05-31 15:38:28 96

原创 红黑树的精华总结

红黑树的概念红黑树是对普通二叉搜索树的平衡改进,通过给每个节点增加一个颜色标识,每个节点颜色不是黑色就是红色,按一定的规则进行位置安排就能控制以每个节点为根的最长路径不大于最短路径的二倍,从而控制树的整体高度,使对树的搜索性能提高。红黑树的性质根节点颜色是黑色节点颜色不是黑色就是红色一个节点颜色是红色,则它的两个孩子的颜色一定是黑色对于每个节点,以这个节点为根出发的每一条路径上有相同数量的黑色节点每个叶子节点的颜色是黑色(这里的叶子节点是指空节点)满足上面的性质就能满足最长路径不大于最短

2022-05-31 00:10:38 156

原创 AVL树的精华总结

AVL树的概念AVL树是对普通二叉搜索树的平衡改进,我们知道当向一颗二叉搜索树中插入有序或接近有序的数据时,搜索树就容易退化成单只树,搜索数据的性能就变成了O(n),我们希望能得到一棵每条分支长度都近乎相等的平衡搜索树,这样我们查找的性能就是O(logn),AVL树就是出于这样一种目的设计出来的,AVL树控制平衡的方法是,给树的节点加入一个平衡因子,平衡因子就是左右子树的高度差,保证每个节点的平衡因子绝对值小于2,就能得到一棵高度平衡二叉搜索树即AVL树,从而提高搜索的性能。AVL树的插入这里我们主

2022-05-30 17:57:56 197

原创 二叉树的前中后序遍历非递归版

我们知道二叉树的遍历用递归来实现比较简单,代码就几行,如下void prevorder(Node*root) //前序遍历{ if(root==nullptr) return ; cout<<root->val<<" "; prevorder(root->left); prevorder(root->right);}void inorder(Node*root) // 中序遍历{ if(r

2022-05-24 14:21:00 65

原创 STL容器set和map的使用介绍

序列式容器和关联式容器在STL中像vector list deque forward_list这样的容器,里面存储的数据元素是线性结构的,通过线性的数据结构来管理和操作,这样的容器就是序列式容器。

2022-05-24 00:13:01 216

原创 二叉搜索树的概念及实现

二叉搜索树的概念二叉搜索树也称为二叉排序树,可以是空树,不是空树时有以下特性。当它的左子树不为空时,左子树所有节点的值都小于根节点的值。当它的右子树不为空时,右子树所有节点的值都大于根节点的值。所有子树也都是二叉排序树。概念比较简单下面详细讲它的实现。二叉搜索树的实现首先它的节点结构跟普通的二叉树没什么区别,下面定义节点template<class K>struct BtreeNode{ BtreeNode(const K&val) //构造函数用来在二

2022-04-22 21:01:23 155

原创 C++的多态学习(二)

目录C++11 关键字final 和override重载、重写和重定义三者区别抽象类多态的原理单继承和多继承时的虚函数表常见问答题C++11 关键字final 和overridefinal关键字有两个用处。1.用来修饰类,使该类成为最终类不能被继承下去。2.用来修饰虚函数,使派生类不能重写该虚函数。override关键字是用来修饰派生类虚函数的,检查其是否重写了基类的虚函数,没重写就报错。重载、重写和重定义三者区别重载是定义在同一作用域下,函数名相同函数参数列表中参

2022-04-16 17:05:55 756

原创 算法题思路复盘——跳石板

题目链接看题目描述点链接。这是一道动态规划的题目,直接拿题目的样例来讲一下模型思路。开始位置n=4,如果m=4,就只需要走0步了,对于走到的当前位置都要知道该数字除自身和1的所有约数然后尝试+每一个约数走的情况,用一个数组step记录走到当前位置所需的最小步数,样例中step[4]=0;没有走过的位置就设置为默认的INT_MAX,4的符合条件的约数只有2,所以走一步的结果是到6,走的步数是step[4]+1;我们只有从4跳到6 这一种情况,看到5这个位置对应数组下标5是INT_MAX说明不可能跳

2022-04-08 17:02:03 768

原创 C++多态内容的基础学习(一)

多态的概念多态的定义及实现方法多态的一些注意细节多态的概念多态顾名思义就是多种形态的意思,在生活中可以理解为不同的对象做同一件事情会产生不同的结果,比如买车票,普通人是全价买票,学生是半价买票,军人可以优先买票。在语言层面上多态可以分为静态多态和动态多态。静态多态就是函数重载,它看起来就像是调用同一个函数却执行不同的行为。动态多态是指将基类和派生类对象传给基类引用或指针管理,调用同一个函数,传入对象不同,执行的行为就不同。一般动态多态就简称多态。用以下代码演示class Person{pu.

2022-04-08 15:11:40 82

原创 C++学习重点之继承

目录1.继承的概念及定义2.继承中基类和派生类之间的赋值和类型转换3.继承中的作用域4.基类与派生类中构造函数析构函数的讲解5.继承与友元6.继承与静态成员7.多继承、菱形继承和虚拟菱形继承1.继承的概念及定义继承是面向对象程序设计语言中实现代码复用非常重要的手段,我们设计一个类可以再设计另一个类用继承的语法使本类继承前一个类的成员变量和成员函数,这是在对前一个类进行功能和特性的扩充,前一个类在继承关系中就可以称为父类,后一个类就称为子类。最前面的祖先类称为基类,下面的都可以称为派生类。继

2022-04-07 22:46:22 745

原创 C++基础入门知识学习(通俗详细讲解)

目录命名空间标注输入输出流缺省参数函数重载引用内联函数C++11新特性auto关键字C++11新特性基于范围的for循环关键字nullptr命名空间(关键字namespace)在C++中我们会自己定义很多的变量、函数和类,这就同时要取各种变量名、函数名和类名。如果这些变量、函数和类的名称都存在与全局作用域中,就要刻意避免重复命名造成的麻烦,要避免命名冲突或名字污染,就要对这些定义的数据类型进行严格管理,namespace就是用来对各种标识符名称进行本地化管理,避免上述麻烦的关键字。

2022-01-17 20:00:48 11038 5

原创 C++基础知识之extern “C“的用法。

概述有时候在C++的工程中可能需要将某些函数按照C的风格来编译,在函数前加extern “C”,意思是告诉编译器,将该函数按照C语言规则来编译。这里通俗的讲就是,在C++的工程中我们可以包含一个头文件,调用一些用C语言格式写的函数。同样的在C的工程中我们也可以包含其它C++工程头文件,调用C++源文件中的函数。接下来就分别介绍这两种用法,和其中原理。C++项目调用C文件的函数我新建一个C++项目然后调用C写的栈这种数据结构为例来进行说明。新建一个C的项目命名位static base,从以前的栈的项目中

2021-12-03 20:15:58 1836 10

原创 常见的排序算法详解(二)

冒泡排序冒泡排序基本上是我们学习过程中接触到的第一个排序方法,思想也比较简单,就是两两比较后,如果大的数在小的数前面就交换两者的位置,然后就往后走一步接着比较两个数。走到队尾就完成一次冒泡,把最大的数就移到了最后,再从头开始冒泡,这时的队长度是n-1,走一趟长度就减一,最终完成升序排列。//冒一趟泡时for (int i = 0; i < n-1; i++) 这是第一趟n个数要比较n-1次 { if (a[i] > a[i + 1]) { swap(&am...

2021-11-26 21:15:33 494 7

原创 常见的排序算法详解(一)

排序统一按升序来排数直接插入排序直接插入排序是一种简单的排序,其思想是将一组待排序的数逐个插到已经有序的一个序列中。对一个数组进行排序,就把第一个位置的数当成已经有序的系列,后面的数依次插到这个有序序列,最后该数组就有序了。日常生活中我们玩扑克牌就利用了这种思想。先来完成将一个数插入到序列中这一趟排序的实现。设有序序列区间是[0,end],即序列最后一个数的下标值用变量end来存储,然后取它左边无序的第一个数用变量x来存储,比较x与end位置的数的大小,如果x小于这个数将这个数往右移.

2021-11-26 12:30:10 873 9

原创 数据结构基础学习——二叉树的知识总结

目录二叉树的概念和性质二叉树顺序结构及实现二叉树链式结构及实现二叉树的前 、中、后序遍历二叉树基础题练习1.二叉树的概念二叉树是树的结构中最常用的一种结构,它的形式是一个结点最多可以有两个子节点,即左结点和右结点。用图表示如下可以看出二叉树中不存在度超过2的结点,而且二叉树的子树有左右之分,次序不能颠倒,二叉树是一颗有序树,对于任意一颗二叉树都是由以下几种结构复合而成的。二叉树中又分有两种特殊的树,即满二叉树和完全二叉树满二叉树就是该树的每一层的结点数都到达了最大,就是除了最后

2021-11-19 10:55:20 2914 7

原创 数据结构基础——堆的概念、结构及应用

数据结构基础——堆的概念、结构及应用目录堆的概念堆这种数据结构的代码实现堆在排序算法上的应用1.堆的概念堆就是以二叉树的顺序存储方式来存储元素,同时又要满足父亲结点存储数据都要大于儿子结点存储数据(也可以是父亲结点数据都要小于儿子结点数据)的一种数据结构。堆只有两种即大堆和小堆,大堆就是父亲结点数据大于儿子结点数据,小堆则反之。堆的性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。用图画展示就如下图所示:2.堆这种数据结构的代码实现了解了堆的概念之后

2021-11-07 21:44:23 3452 5

原创 数据结构基础学习——栈的概念及代码实现

1栈的概念栈和顺序表、链表一样是属于线性表的一种,栈的特性和顺序表及链表有很大的不同,其他两种结构都支持在头部和尾部还有中部的插入、删除和查找,但栈只能在线性表的一端进行插入数据和删除数据等操作。栈对数据的操作遵循==“后入先出”==原则,即先放入栈中的数据拿出来的时候顺序就靠后。这种概念通过画图更有助于理解,如图数据从表的一段插入到表中,表的另一端不能进行任何操作,这一端称为栈的栈底,而放入数据的一端称为栈顶,插入数据称为压栈,也可以从栈顶不断的拿出数据直至空栈,拿出数据称为出栈。出栈如图示:就

2021-10-30 11:56:54 896 16

原创 C语言入门

本人本科专业是机械设计制造及其自动化,也有开c语言程序设计这门课,应该大部分工科专业都有这门课本吧!像很多人一样,我大一大二时对未来依然没有什么具体的想法,上课也是有精神就听一下,没劲就搞其他事了,所以c语言这门课程对于我来说已经没什么印象了,就是零基础了。今年考研上岸,还是学机械,暑假时我就在想我未来的工作方向,感觉机械我学的真不是特别好,工作前景没有计算机行业好,所以心中萌生了转行计算机的想法,也在网上看别人转行计算机的心得经验,暑假先投入大量精力好好学习c语言,自己合理安排好时间,每天学习6小时以上,

2021-07-26 21:26:49 117

空空如也

空空如也

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

TA关注的人

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