自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 贪心算法—

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。这种算法并不总是能找到全局最优解,但在某些问题上能提供足够好的解决方案。

2024-06-22 18:23:43 902

原创 文件管理—linux(基础IO)

openlinux 手册查看命令:man openint main()return 1;\n";while(1){//类比writeif(s > 0){}else{break;close(fd);return 0;pathname: 要打开或创建的目标文件flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读,写打开。

2024-06-22 18:16:06 1080

原创 RAII与智能指针-c++

什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内 存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对 该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现 内存泄漏会导致响应越来越慢,最终卡死// 1.内存申请了忘记释放// 2.异常安全问题Func();// 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.

2024-06-10 23:08:11 650

原创 背包问题—动态规划

与找521 零钱兑换的方式的区别,这个是排列,顺序不同,也统计次数。01背包问题:没有物品(元素)只能选择1次。完全背包,物品(元素)个数有无限个。

2024-06-10 23:07:46 164

原创 进程控制—linux

shell建立一个新的进程,然后在那个进程中运行ls程序并等待那个进程结束。用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。而且它们都运行到相同的地方。然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序 并等待这个进程结束。通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副 本。在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。

2024-06-08 18:34:39 1077

原创 算法—字符串操作

【代码】算法—字符串操作。

2024-06-08 18:33:23 291

原创 进程——linux

计算机管理硬件1. 描述起来,用struct结构体2. 组织起来,用链表或其他高效的数据结构系统调用和库函数概念在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统 调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。至此,值得关注的进程状态全部讲解完成,下面来认识另一种进程。

2024-06-01 21:51:20 1044

原创 linux系统环境—基础开发工具

linux开发环境所需的软件及其相关命令

2024-05-21 19:03:47 929

原创 算法-二分查找

具体:定义区间左右指针,中间结点的数值与目标值比较结果,不断减少一半的区间长度,其去target所在区间里搜索,如果left>right跳出循环。二分查找:在数组有序的条件下,通过不断选取中间结点,根据中间结点的数值与目标值比较结果,将。右边界模板,通过二段性,分成两段,target位于左段(左区间)的最右端点。左边界模板,通过二段性,分成两段,target位于右段(右区间)的左端点。

2024-04-22 15:13:56 524 1

原创 算法-栈操作

【代码】算法-栈操作。

2024-04-22 15:13:11 193

原创 算法—hash表

熟悉hash映射,用key判断是否对象存在或者存在个数,在其他问题种常用来记录key(键值)是否存在(或者存在个数),用来if判断。

2024-04-17 12:02:25 302

原创 linux权限

目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目,即使目录仍然有-r 读权限(这 个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

2024-04-16 22:59:42 1163

原创 算法—链表操作

掌握数据结构链表的头插和尾插,删除,查找的操作,然后就可以根据题目要求实现其操作组合。对于链表来说,画图更好理解题解中的具体步骤,否则难以理解代码实际对数据结构的操作。

2024-04-16 10:14:47 234

原创 算法—分治

具体实现:多数采用递归操作分解,然后递归操作,需要注意的是函数头,函数体,以及递归出口,函数头:由问题所需变量指定,递归出口由问题最小规模返回决定,函数体看问题具体的需要的信息决定。分治-快速排序:下面这三题:都是快排,其中第一题快排,第二题,在快排的基础上,进行剪枝,避免无用的排序,第三题同理,也是避免无用排序。O(Nlog2k);:指的是当主问题可以被分解为一个相同次级问题加相同基本问题时,采用这种思想,基本问题指问题规模最小时的情况,次级问题是指主问题的n级降低n-1级的问题。

2024-04-13 07:53:16 282

原创 c++11的重要特性2

可变参数模板在3中。

2024-04-06 21:14:54 585

原创 c++11的重要特性3

同时还用到了C++11的另外一个特性——初始化列 表,通过初始化列表来初始化一个变长数组, {(printarg(args), 0)...}将会展开成((printarg(arg1),0), (printarg(arg2),0), (printarg(arg3),0), etc... ),最终会创建一个元素值都为0的数组int arr[sizeof...(Args)]。的, 只能通过展开参数包的方式来获取参数包中的每个参数,这是使用可变模版参数的一个主要特 点,也是最大的难点,即如何展开可变模版参数。

2024-04-06 21:14:15 748

原创 左值与右值,以及与其相关的c++11的重要特性1。

1. 左值引用只能引用左值,不能引用右值。2.但是const左值引用既可引用左值,也可引用右值。int main()// 左值引用只能引用左值,不能引用右值。int a = 10;// ra为a的别名// 编译失败,因为10是右值// const左值引用既可引用左值,也可引用右值。return 0;1. 右值引用只能右值,不能引用左值。2.但是右值引用可以move以后的左值。int main()// 右值引用只能右值,不能引用左值。

2024-04-02 18:07:49 1025

原创 一月笔记--hhh

类模板中语法错误不会显示位置,1、函数返回值的形式为值传递。3、引用时两个变量类型不一致。内部编译错误:c1001。

2024-03-30 23:59:55 113

原创 算法-滑动窗口

本题更新结果具体问题具体分析,因为出窗的条件是满足问题目标,所以需要在出窗满足时,提前更新结果,然后观察其他问题,出窗条件为不满足问题目标(通常是大于/超过)。滑动窗口,与双指针类似,也是使用两个指针进行移动遍历数组处理,也可以说时双指针中的一个特殊类型,因为左右指针同向移动,左右指针中间所夹的区域像一个窗口一样移动,所以称为滑动窗口。以第一个例题举例,首先需要两个指针,一个指针入窗口(right),一个指针出窗口(left),以及right遍历的所需条件。第一个例题是在出窗口前时,满足条件,更新结果。

2024-03-30 23:58:03 482

原创 算法-双指针

双指针又分为双指针遍历分割,快慢指针和左右指针。

2024-03-23 16:04:07 499

原创 算法—位运算

按位与1后,除最低位外所有位变为0,判断最低位,为1,所有数n的x位为1,反之为0。然后与数n按位或 ,(bit)0与任意或为任意,1与任意或为1,所有将数n的x位置为1。然后与数n按位与,(bit)1与任意与为任意,0与任意与为0,所以将数n的x位置变为0。将(int)1左移x位,在按位取反,变成如下,除了x位外都为1.。原理:-n为:将最右侧的1的左边的数全部取反,然后与数n相与。原理:n-1为将最右侧的1的右边的数全部取反,然后与数n相与。算术右移:仅对于有符号数,对于无符号数为逻辑右移。

2024-03-23 16:03:55 685

原创 红黑树(STL-ordered_map)

结论2:有n个内部结点的红黑树的高度为h=2^(h/2)-1-->log2(n+1)iterator++:iterator++的所指结点,为其右子树的最大值(最左结点),无右子树时,为某一祖先,即从下向上遍历,第一个祖先的左孩子为该iterator所指结点的祖先。类似AVL树,复用旋转函数,但是少了平衡因子变化。

2024-03-20 17:26:04 883

原创 位图与布隆过滤器

第二步:将对应的小文件(A1和B1),即hash分割时hash函数相同的小文件,一起放进set中,过滤掉重复和不相同的元素,每次处理完将set中的元素存入对应的文件,依次对A2,B2~A200,B200进行相同处理。我们每次加入一个元素后,多个hash函数对应的各自的多个位都+1,每次删除一个元素后,同理减一。第一步,同上,对两个文件各自进行hash分割为200个小文件,分别为A1~A200,以及B~B200,A1和B1采样相同的hash函数,那么两个大文件的同一个query,必然在哈希函数相同小文件中。

2024-03-20 17:24:56 614

原创 STL-map和set

set文档翻译:1、set是按照一定次序存储元素2、在set中,value与key相同,即是唯一的,key不可修改,但是可以插入或者删除3、在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对 子集进行直接迭代。

2024-03-05 22:49:59 982

原创 平衡搜索二叉树—AVL树

为了避免搜索二叉树的高度增长过快,降低二叉树的性能,规定在插入和删除二叉树的结点的时候,任何结点左右子树的高度差绝对值不超过1,这样的二叉树被称为平衡二叉树(balanced Binary Tree),简称平衡树。在搜索二叉树BST的基础上增加以上性质,就称为AVL树。

2024-03-05 22:49:19 366

原创 二叉搜索树

情况4:在它的右子树中寻找中序下的第一个结点(关键字最小),用它的值填补到被删除节点 中,再来处理该结点的删除问题--替换法删,或者在左子树中寻找中序下的最后一个结点,交换此结点与删除结点的值,将其转换为对左子树最右结点的删除(情况1或者2).对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二 叉搜索树的深度的函数,即结点越深,则比较次数越多。情况3:删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点--直接删除。删除和插入有递归和非递归两个版本。

2024-02-17 22:46:24 804

原创 java入门、环境配置及其特点介绍

区别是:解释性语言的原代码经过编译后,所形成的代码(java是二进制字节码),不能被计算机直接使用,需要通过解释器来执行。不同的操作系统需要不同的jvm虚拟机器来运行同一个代码(跨平台),所以需要下载不同操作系统的jdk。解释性语言:javascript,PHP,java 编译性语言:c/c++1、组成部分:JDK=java开发工具+JVM(java虚拟机)+java的核心类库[类]在.java文件所在目录下输入cmd,打开命令行,在此目录下使用命令行。1、java的运行机制为。

2024-02-04 22:14:13 400

原创 数据结构—堆:STL-priority_queue

1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。empty():检测容器是否为空。

2024-01-29 23:52:02 396

原创 c++多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。

2024-01-28 22:02:53 832

原创 c++继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。teacher t1;

2024-01-25 15:05:59 954

原创 STL中的stack、queue以及deque

1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作pop_back:尾部删除元素操作。

2024-01-17 16:10:19 1221

原创 STL-list的使用简介

因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代 器失效的,3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高 效。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。,比如:要访问list 的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;

2024-01-11 17:01:37 401

原创 STL-vector常用接口实现

c++

2024-01-06 18:19:13 398

原创 12月笔记

通过上面的研究可知,所谓右值引用,不过是延长了左值对象的生命周期,这样的对象是可以取地址的、可修改的,不具有右值的特性,本质上来说是个左值。那么c++里面右值到底是什么呢?

2024-01-06 18:16:48 1292

原创 STL-vector

构造函数声明接口说明vector()(重点)无参构造构造并初始化n个val(重点)拷贝构造使用迭代器(任意类型)进行初始化构造改变内存的容量以及insert与erase迭代器对象后,会导致迭代器失效迭代器失效解决办法:在使用前,对迭代器重新赋值即可。

2024-01-04 15:51:47 1085 1

原创 string类

字符串转整形数字字符串相加string类的文档介绍 总结:注意:1. 在string尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c'三种的实现方式差不多,一般 情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串。 2. 对string操作时,如果能够大概预估到放多少字符,可以先通过reserve把空间预留 好。 上面的几个接口大家了解一下,下面的OJ题目中会有一些体现他们的使用。string类中还有一些其他的 操作,

2023-12-29 10:56:58 959 1

原创 C语言动态内存管理

这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定。如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。free函数用来释放动态开辟的内存。如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。

2023-11-30 22:30:03 195 1

原创 文件操作(C语言)

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。

2023-11-30 21:11:20 46

原创 数据结构与算法-排序

直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用时间复杂度:O(N^2)空间复杂度:O(1)稳定性:不稳定堆排序使用堆来选数,效率就高了很多。时间复杂度:O(N*logN)空间复杂度:O(1)稳定性:不稳定快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序时间复杂度:O(N*logN)空间复杂度:O(logN)稳定性:不稳定归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。时间复杂度:O(N*logN)

2023-11-27 20:30:49 84 1

原创 1.调试技巧

SIGSEGV: SIG 是信号名的通用前缀, SEGV 是segmentation violation,也就是存储器区段错误。3.Dev-C++错误:编译器设置验证过程中,发现存在以下问题"TDM-GCC 4.9.2 32-bit Debug。1.如果函数出错,就找该函数,若是找不到找前一个,没找到继续向前。2.肉眼debug,一步步走,速度放缓,每个步骤与思路进行比对。方法:复制lib到该目录下,重命名为lib32。

2023-11-26 19:35:35 164 1

空空如也

空空如也

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

TA关注的人

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