- 博客(21)
- 收藏
- 关注
原创 专题十:单调栈
通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。 单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。更直白来说,就是用一个栈来记录我们遍历过的元素,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。单调栈里只需要存放元素的下标i就可
2023-07-11 11:42:00
280
原创 二、线性规划模型
注意:matlab只能求最小值,求最大值前面要加负号- 注意:上述例子中x只有下界,没有上界,zeros(3,1)代表生成三行一列全为零的数据;y = -y代表求最大值。
2023-06-06 17:06:52
231
原创 专题八:贪心算法
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。贪心算法并没有固定的套路。所以唯一的难点就是如何通过局部最优,推出整体最优。那么如何能看出局部最优是否能推出整体最优呢?有没有什么固定策略或者套路呢?也没有! 靠自己手动模拟,如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划。如何验证可不可以用贪心算法呢?最好用的策略就是举反例,如果想不到反例,那么就试一试贪心吧。面试中基本不会让面试者现场证明贪心的合理性,代码写出来跑过测试用例即可,或者自己能自圆其说理由就行了。刷题或者面试的时候,手动
2023-06-06 12:48:36
397
原创 一、数学建模是什么?
数学模型的分类:(1)按所用的数学知识分类:初等模型、几何模型、微积分模型、微分方程模型、图论模型、概率统计模型、规则论模型等。(2)按所解决的问题的领域分类:物理模型:自然科学领域内的问题非物理模型:经济模型、交通模型、人口模型、生态模型、环境模型、医学模型、社会学模型(3)按所建模目的分类:描述模型、分析模型、预报模型、优化模型、决策模型、控制模型等。(4)按所建模型的表现特性分类:确定模型、随机模型、静态模型、动态模型、离散模型、连续模型。
2023-06-05 22:21:08
3233
原创 【数据结构与算法】map和unordered_map区别及其优缺点
C++的STL库实现有两种字典结构,即map和unordered_map(也就是通俗意义上的hash map)。这两者虽然都称为Map,但其实它们的底层实现原理具有很大差距,因此它们的使用场景也不尽相同。字典类型又被称为关联数组(associative array),关联数组和正常数组的使用方法是相似的,但其不同之处在于字典结构的下标不必是整数,而可以是任意类型。
2023-05-12 20:35:02
2594
原创 6、内存泄漏和内存溢出有什么区别?
内存溢出 (out of memory),指程序申请内存时,没有足够的内存供申请者使用。内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误。1、内存中加载的数据量过于庞大,如一次从数据库取出过多数据2、集合类中有对对象的引用,使用完后未清空,使得不能回收3、代码中存在死循环或循环产生过多重复的对象实体4、使用的第三方软件中的 BUG5、启动参数内存值设定的过小一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。
2023-05-12 20:17:46
141
原创 5、C和C++有什么区别?适用场景?
(1)因此C++语言中有类和对象以及继承多态这样的OOP语言必备的内容,此外C++支持模板,运算符重载,异常处理机制,以及一个非常强大的C++标准模板库STL,另外一个Boost库现在也归属C++标准库,提供了很多强大的功能。(2)既然C++是面向对象的OOP语言,因此它还有非常强大的设计模式,比如单例,工厂,观察者模式等等,这些在C语言当中都是不支持的。(3)C语言通过malloc和free来进行堆内存的分配和释放,而C++是通过new和delete来管理堆内存的。
2023-05-12 19:56:47
991
原创 4、C++中的函数重载
是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。//输出B。
2023-05-10 14:24:24
227
原创 3、C/C++中的extern
而且编译阶段,外面是找不到该函数的,但是不报错。它通常是根据参数来区分具体的调用,那换句话说,CPP编译器会将参数类型和函数名字连接在一起,这样编译器就可以根据符号名字的参数进行链接。2、extern可以置于变量或者函数前, extern标识的变量或函数声明定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而。”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。
2023-05-10 13:23:52
354
原创 2、strcpy、strncpy、strlcpy和memcpy
它最大的问题是strcpy并不检查目的缓冲区的大小边界,而是将源字符串逐一的全部赋值给目的字符串地址起始的一块连续的内存空间,同时加上字符串终止符。当n<=strlen(s1)时,s2是没有结束符“\0”的,那么用s2的时候没有结束位置,后续对于字符串的操作可能会造成内存的非法访问,因此为了避免发生这种错误,可以手动添加’\0’。在已知dest缓冲区大小并不会造成缓冲区溢出前提下,将src地址开始的字符串复制到以dest开始的地址空间,src字符串的大小。操作成功,返回s2,否则返回NULL。
2023-05-10 13:19:33
1113
原创 1、C++中的 new 与 delete
1、new 分配内存按照数据类型进行分配,无需指定空间的大小,编译器会自行计算;malloc 分配内存按照指定的大小分配,需要显式的计算;2、new/delete 返回的是指定对象的指针,而 malloc/free 返回的是 void类型的指针,因此 malloc 的返回值一般都需要进行类型转化。3、new的底层通常使用malloc,然后调用构造函数,最后返回自定义类型的指针。delete先调用析构函数,底层通常是free。4、new 是一个操作符可以重载,malloc 是一个库函数。
2023-05-10 13:09:20
147
原创 专题四:字符串
声明: 参考:代码随想录C++中的resize()函数_c++ resize函数原理_dutmathjc的博客-CSDN博客个人总结归纳,仅用于复习回顾,不做他用!如发现文章内容有误,恳请批评指出! 题型一:反转字符串思路 在反转链表中,使用了双指针的方法。那么反转字符串依然是使用双指针的方法,只不过对于字符串的反转,其实要比链表简单一些。因为字符串也是一种数组,所以元素在内存中是连续分布,这就决定了反转链表和反转字符串方式上还是有所差异的。对于字符串,我们定义两个指针(也可以说是索引下标)
2023-04-16 10:26:57
154
原创 专题三:哈希表
有时也被称为散列表。哈希表是根据关键码的值而直接进行访问的数据结构。。但是哈希法也是,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
2023-04-07 13:13:44
246
原创 专题二:链表
/ 单链表int val;// 节点上存储的元素// 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数。
2023-04-04 19:08:02
235
1
原创 专题一:数组
1、数组是存放在连续内存空间上的相同类型数据的集合。2、数组可以通过下标索引的方式获取到下标下对应的数据。1)数组下标都是从0开始的。2)数组内存空间的地址是连续的3)数组的元素是不能删的,只能覆盖。4)使用C++,要注意vector 和 array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。5)在C++中二维数组在地址空间上是连续的。
2023-03-18 17:02:56
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅