- 博客(13)
- 收藏
- 关注
原创 洛谷P5369
理解为当前我要使集合s满足性质1, 我可以枚举s中那个数放在最左边, 假设是a[i], 那么剩下的集合为 s^i , 如果Sum(s^i)
2024-05-24 23:07:23 798 1
原创 最长小于等于k的子数组
问题描述:给定一个无序数组arr,其中元素可正、可负、可0。给定一个整数k,求arr所有的子数组中累加和小于或等于k的最长子数组长度例如:arr = [3, -2, -4, 0, 6], k = -2. 相加和小于等于-2的最长子数组为{3, -2, -4, 0},所以结果返回4[要求]时间复杂度为𝑂(𝑛),空间复杂度为𝑂(𝑛)输入描述:第一行两个整数N, k。N表示数组长度,k的定义已在题目描述中给出第二行N个整数表示数组内的数输出描述:输出一个整数表示答案。
2024-05-07 22:34:18 197
原创 c++中的继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类或子类,被继承的类称为基类或者父类。继承呈现了面向对象。程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public ://名字属性 int _age;//年龄属性 }
2023-07-18 12:00:14 355 1
原创 【c++】序列容器之 list
list是可以在常数范围内任意位置进行插入和删除的序列容器,并且该容器支持前后双向迭代。这是基于list的底层数据结构是带头双向循环链表,因此list容器是不支持随即访问的(也就是不能像数组那样使用 [i]下标来访问元素),list访问元素的时间复杂度是线性时间。
2023-05-27 18:31:23 173 1
原创 用一个栈实现另一个栈的排序
由以上两个约束条件,可以一直往help栈中加入stack中的元素,并且维持help栈由栈顶到栈底递增排序(排序过程与插入排序类似),直到stack栈空,其元素已在help栈中排好序,在从顶到底压回satck栈,排序完成。2、help不空,且cur大于help栈顶元素,则将help.top元素弹出并压入stack,直到cur小于等于help.top或者help弹空(目的是为了给cur找个合适的位置压入),再将cur压入help。一个栈中元素的类型为整形,现想将栈从顶到底按从大到小排序,只允许申请一个栈。
2023-05-22 23:28:28 105 1
原创 如何使用递归函数和栈操作逆序一个栈
一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底依次为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能使用递归函数来实现,不能使用其他数据结构。
2023-05-22 22:01:40 69 1
原创 c++stl序列容器之vector
-------模板类vector是表示大小可变的数组的序列容器,也是使用连续的空间来存储元素,也就意味着可以使用下标来访问元素,和数组一样高效,但与数组不同的是vector的大小是动态改变的,由容器自动处理。为了获得高效的管理空间的能力,vector相比数组需要占用更多的空间。c++11增加了使用列表进行初始化。//使用列表初始化 vector < int > v1;//定义空对象v1,后续可加入int类型元素 vector < int > v2(5 , 100);
2023-05-19 14:31:33 1142 3
原创 string类及常见接口介绍
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合面向对象的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。string类中还有一些其他的操作,这里不一一列举,大家在需要用到时不明白了查文档即可。
2023-05-11 00:30:44 461 5
原创 c++命名空间
个人对于命名空间的理解:命名空间就像是一个主子,他有很多走狗,一个项目中可以有多个主子,他们各自的走狗名字可以相同,但是担当的作用可以不同,上述例子std命名空间中的cin 和 cout分别是输入输出的作用,但N命名空间中的cout是一个变量。std是c++标准库的命名空间,c++标准库的定义和实现都放在这个命名空间中,其中cout是定义在其中的ostream类(输出流)的对象,cin是定义在其中的istream类(输入流)的对象。std是C++标准库的命名空间,如何展开std使用更合理呢?
2023-04-21 21:42:58 78 1
原创 c++指针悬挂问题
接着函数即将返回,释放局部对象,执行析构函数,先对object2对象的name指针指向空间做释放,然后释放object2的空间,接着对object1做同object2的操作,但是释放object2的name指针指向空间时发生了断点,这是因为在拷贝时,是直接将object1的name成员的值直接赋值给object2的name成员,这两个对象的name指针指向同一块内存空间,导致在析构的时候二次释放,从而引发断点。内置的数据类型的对象可以用等号进行赋值运算,那么类类型的对象可以用等号做赋值运算吗?
2023-04-19 18:09:55 231 1
原创 c++的对象与const
或使用方法:常对象一旦创建成功,其在以后的任何场合都是的(只读的),并且在所有的成员函数中(除了隐式调用的构造函数和析构函数)。几点说明:1.在有些情况下,一定要修改常对象的数据成员的值,ANSI c++考虑到编程的需要,可以,如将上述age声明改为:mutable int age;将age声明为可变的数据成员,这样就2.为什莫构造函数不用声明为const,因为在声明一个常对象时,先调用构造函数对其初始化,对象只有在(也就是创建完成才获得常量属性),所以在构造函数的过程中可以向其数据成员写值。
2023-04-19 00:28:19 150 1
原创 构造函数的初始化列表
对于成员属性是内置的数据类型如,int,char,string,double等,使用初始化列表,和使用普通的赋值语句区别不大,但是对于类类型的成员,使用初始化列表少了一次调用默认构造函数的过程,而是直接调用拷贝构造,这对于。说明:可以看到a初始化的结果并不是我们想要的,这是因为a成员在类中定义在b成员的前面,所以初始化列表中先初始化a,执行a(a_ * b) ,而b还未初始化,从而导致a出现乱码。因此,如果成员初始化依赖其他成员的值,那么要注意初始化顺序,为了避免这个问题,一般按照定义的顺序初始化成员。
2023-04-17 00:04:30 267 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人