自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态规划之子序列问题1

以leetcode300题为例此题最为经典,所有的算法书在讲子序列问题时都以这个为模板题,后面的题可以按照此题的分析方法进行分析。

2025-05-05 17:40:58 270

原创 动态规划之最大子数组(环形数组)

第二种就是你可能前面一部分和后面一部分成环了,你求的是最大,那里面就剩最小。无非就两种情况,一个是你在普通数组的情况下能求最大值,也就是你没有成环。环形数组也就是在普通数组上的变形。

2025-05-04 16:05:43 67

原创 动态规划之子数组系列

2025-05-04 15:39:28 56

原创 动态规划之多状态问题(股票买卖利润最大)

股票买入后不能在买,也就是必须买入后卖出才能买一次交易叫买卖,这样的交易次数不能超过两次返回最大利润。

2025-05-04 12:31:59 517

原创 动态规划之多状态问题1

也就是给一个预约数组,选择一些数字,让其总和最大,但不能选择相邻的两个数字。

2025-05-03 18:49:18 251

原创 动态规划之路劲问题3

dp[i][j]:表示到达这个位置时的最少的健康点数,如果我们以这个表示我们的状态,就会发现有问题,因为这个ij位置的健康点数不仅仅受下一步(也就是往右和往下)的影响,还受后面很多个路径上的点的影响,比如以例题为例:一开始我们如果初始值为3,走完-2还剩1,那我们走不出-3和-5,如果我们初始值为6,走完-2,-3,3,1,但是到-5时变为0,所以初始值为7才是对的,所以我们ij位置不仅仅是受最近的i j-1和i-1 j位置影响,还受多个位置的值影响。以dp[i][j]为结尾,最少的健康点数。

2025-05-03 17:56:01 386

原创 动态规划之路径2

2025-05-03 16:06:21 154

原创 STL之list容器

1.list的底层是双向链表结构,双向链表中的每个元素在互不相关的独立结点中,在结点中通过指针指向前一个元素和后一个元素2.list是可以在常数范围内在任意位置的插入和删除的序列式容器,并且该容器可以前后双向迭代3.vector的优点:支持随机访问,间接的就支持了排序/二分查找/堆排序等缺点:1.头部和中部的插入效率低,需要挪动数据2.插入数据空间不够需要增容,增容需要开新空间,拷贝数据,释放旧空间list的优点:没有增容代价,且任意位置插入都是0(1);

2025-05-03 12:25:01 1212

原创 动态规划之路径问题1

leetcode62:不同路径。

2025-05-02 14:23:07 306

原创 STL之vector容器

1.vector是可变大小数组的容器2.像数组一样,采用连续的空间存储,也就意味着可以通过下标去访问,但它的大小可以动态改变3.每次的插入都要开空间吗?开空间就要意味着先开临时空间,然后在拷贝旧的到新的上面,在释放原来的,就时间而言,这是一个相对代价很高的任务;显然这是不行的,vector的分配策略:会分配一些而外的空间以适应可能的增长,例如我们平时说的以1.5或者2倍的方式增容,不同的库选择不同的策略权衡空间的使用和重新分配,以至于在插入一个元素时能在常数时间内插入;

2025-05-02 13:41:05 1216

原创 动态规划简单题2

leetcode91题(解码方法)

2025-05-01 21:55:16 377

原创 动态规划简单题

以leetcode746(使用最小花费楼梯)进一步巩固动态规划答题步骤。

2025-05-01 18:56:21 387

原创 动态规划引入

动态规划的题目大致解决方法都可以按照如上的思路进行。

2025-05-01 17:29:19 520

原创 STL之string容器

c_str():返回c格式的字符串 (在string类中是以size表示有效大小,c风格是以\0表示结束,返回c格式的字符串是在末尾加\0,而string在处理字符串是没有\0结尾表示结束,而是用size)在c语言中,字符串以"\0"结尾的一些字符的集合,并且提供了一系列的str函数,但有时候可能会越界访问,且库函数是与字符串分离的,不太符合OOP的思想,为了方便管理,c++封装了一个类。size():返回字符串的有效长度(一般用这个,length比较早期,size是与其他容器统一)

2025-05-01 12:55:50 1012

原创 Linux基础IO

概念:IO就是内存和外设之间的数据传输过程。

2025-04-28 20:26:19 924

原创 Linux进程控制

fork()函数初识:作用:在当前进程创建一个子进程,新进程称为子进程,原进程称为父进程返回值:pid_t实际是一个int类型,typedef过,子进程返回0,父进程返回子进程id,出错返回-11.分配新的内存块和数据结构(PCB,页表,进程地址空间)给子进程2.将父进程的部分数据结构内容拷贝给子进程(继承)3.添加子进程到系统进程列表当中4.fork()返回,开始调度器调用,调度器可能会选择父进程继续执行,也可能会选择子进程执行,这取决于调度算法和系统的当前负载情况。注意:在现代操作系统中,

2025-04-26 14:54:07 1138

原创 Linux进程概念

管理:先描述后组织如何描述:简单来说就是用结构体struct如何组织:简单来说就是用所学到的高效的数据结构,链表等等概念:进程是指在系统中正在运行的一个程序实例,是操作系统进行资源分配和调度的基本单位。当一个程序被加载到内存中并开始执行时,它就成为了一个进程。

2025-04-24 16:53:54 829

原创 c++之类与对象(third)

构造函数赋值:在创建对象时,编译器会自动调用构造函数进行赋值,之前简单来说叫初始化,但这里不能叫做初始化,因为初始化只能初始化一次,在构造函数体内可以重复赋值,所以出现了初始化列表。初始化列表:以一个:(冒号)开始,接着是以,(逗号)分隔的数据成员列表,每个”成员变量“后面跟一个放在括号中的初始值或表达式注意:1.每个成员变量在初始化列表中只能出现一次(对应初始化只能初始化一次)2.类中包含以下成员,必须放在初始化列表位置进行初始化:引用成员变量const成员变量。

2025-02-18 20:57:27 384

原创 c++之类与对象(second)

这样写就会有问题,问题在于test函数的参数是const Date&d,d所指向的内容是不可以修改的,但是在d里面调用了Printf,参数是隐含的this指针,Date const*this,这个是可以修改this所指向的内容,这说明权限放大了,要加const去修饰this指针,也就是void Print()const。在某些情况下,如果你不想直接暴露对象的真实地址,可以返回NULL,或者获取对象地址需要进行额外的控制和处理,通过&操作符重载,可以实现自定义的逻辑,而不是简单的返回对象的真实地址。

2025-02-18 14:57:19 1508

原创 c++之类和对象(first)

/类体:由成员变量和成员函数组成//注意有分号,类似于一条语句class为关键字,classname为类的名字,{}为类的主体,定义完后有分号;类中的元素叫做成员,类中的数据称为成员变量或者类的属性,函数称为成员函数或者类的方法1.声明和定义都在类体内注意:如果成员函数在类中定义,可能会被当初内联函数处理2.声明放在.h文件中,定义放在.cpp文件中(这种更推荐,更符合工程的思想)但定义时要声明是在哪个类中的。

2025-02-17 21:53:15 1827

原创 c++之范围for

对于以前要遍历一个数组,需要程序员自己书写数组的范围(sizeof)因此c++中引入范围for,避免因为范围书写错误而导致程序有意想不到的结果。

2025-02-17 14:45:01 332

原创 C++之auto

也就是说auto相当于一个类型声明时占位符,编译器会在编译期间将auto替换为变量的实际类型。在早期的c语言和c++auto仅仅是一个自动存储器的局部变量,也就是生命周期出了代码块就没了。实际编译器只对第一个类型推导,然后在用推导出来的类型定义其他变量,所以c和d那条编译不过。但c++11中auto是一个全新的含义:自动推导类型,编译器会在编译时期推导。这样是编译不过去的,必须要auto b=a;auto不能作为形参类型,编译器无法对a的实际类型推导。两个一样,没有区别,b和c的类型都是int*

2025-02-17 14:28:13 247

原创 c++之内联函数

内联函数可以提高效率,但代码很长或者有循环/递归都不适用,只适合短的代码,比如交换两个值的函数?并且加了inline是否会在相应的位置展开?取决于编译器?inline只是给编译器一个建议并不是一定会展开。内联函数不建议定义和声明分离,分离会导致链接错误,因为inline被展开之后就没有函数地址了,这样就链接时就无法找到函数。

2025-02-17 12:13:27 206

原创 c++之引用

引用可以提高传参时的效率,避免创建临时空间,效率高。但实际使用场景得谨慎引用的底层逻辑是使用指针实现。

2025-02-16 21:40:19 1598 1

原创 c++之函数重载

3为函数名的字母个数,ii为两个类型int int,那么在连接时就可以辨认出是哪个函数,例如add(int,int)就会找到<_Z3addii>,如果是add(char,char)就会找到<_Z3addcc>,windows也是同样的道理,只是命名风格不一样,那么通过这样看,如果是返回类型不一样是不能构成函数名重载的,只要参数不同就可以构成函数名重载,参数的个数,类型或者顺序不同。是一个固定的前缀,它是修饰后的名字起始标识,用于告知链接器这是一个经过 C++ 名字修饰的符号,编译器和链接器看到。

2025-02-12 20:40:42 514

原创 c++之缺省参数

注意:1.半缺省值参数必须从右向左依次并且连续给出,不能间隔给,也就是可以给cb,不能c a。2.缺省参数不能在函数的声明和定义中同时出现(一不一样都不能同时出现)在声明或者定义时给参数一个默认值,如果调用参数时没有实参,则用缺省值(默认值);注意:传参如果像下面这样就会报错,不允许前面的不传,后面又传。1.全缺省参数:顾名思义就是全部参数都有缺省值。当传参只传一个时,a就用实参,bc用缺省值。顾名思义就是给一半(没有给全)的缺省值。当都不传参时,就都用缺省值。当传全部时,都用实参。

2025-02-12 19:04:03 181

原创 c++入门之命名空间

命名空间:在c/c++中,有很多的变量名,函数或者类的名称存在于全局作用域中,为了避免冲突和更好的管理命名,使用命名空间能够对这些标识符本地化(也就是只有在这个命名空间的域下才可以使用)以避免命名冲突和名字污染。一个命名空间就相当于定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。在c++中使用cout输出,cin输入,并且使用<<(可以自动推导类型不用%d等)所以一般大型项目为了避免命名冲突会std::cout<<a<<endl;2.使用using把命名空间里的某部分内容展开。

2025-02-11 21:54:01 447

空空如也

空空如也

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

TA关注的人

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