- 博客(52)
- 收藏
- 关注
原创 【动态规划算法】路径问题
动态规划(Dynamic Programming,简称 DP)是一种通过分解复杂问题为重叠子问题,并存储子问题的解以避免重复计算,从而高效求解具有特定性质(重叠子问题、最优子结构)问题的算法思想。一、核心思想:“分解 + 复用”动态规划的核心在于:1.将原问题拆解为规模更小的子问题;2.求解子问题后,将结果存储起来(记忆化),避免后续重复计算;3.基于子问题的解,推导出原问题的解。简单来说,就是 “”,二、动态规划的 2 个关键前提三、动态规划的 2 种实现方式四、经典应用场景。
2025-08-03 21:49:33
839
8
原创 【动态规划算法】斐波那契数列模型
对于初学者来讲学术上的概念晦涩难懂,将用通俗易懂的方式带来感性的理解.1.状态表示dp表(一维或二维数组)里面的值所表示的含义从哪获取?1.题目要求,如本题2.题目没有明确说明的情况下+做题经验的累积3.分析问题的过程中,发现重复的子问题来概括2.状态转移方程就是dp表元素等于什么,是一种递推关系式,本题已告知3.初始化要确保填dp表时不越界,对填表时越界的元素首先初始化4.填表顺序为了填写当前状态的时候,所需要的状态已经计算过了的顺序,本题为从左向右5.返回值。
2025-07-30 11:48:29
792
52
原创 【算法】前缀和经典例题
1.预处理出来一个前缀和数组⽤ dp[i] 表⽰: [1, i] 区间内所有元素的和,那么 dp[i - 1] ⾥⾯存的就是 [1,i - 1] 区间内所有元素的和,那么:可得递推公式: dp[i] = dp[i - 1] + arr[i];2.使用前缀和数组当询问的区间是 [l, r] 时:区间内所有元素的和为: dp[r] - dp[l - 1]细节问题:为什么下标要从1开始计数?
2025-07-26 21:13:40
1299
28
原创 【Linux】进程概念
冯诺依曼体系结构,操作系统简单概念,描述进程与如何管理,查看进程状态指令,标识符pid,ppid,fork函数详解
2025-07-22 19:58:45
1082
61
原创 【算法】二分查找经典例题
该模板为最朴素的二分查找模板,适用范围一般限制较多,后续会总结左右边界的判断模板,为万能模板,适用范围更广非递减顺序排列就是递增序列或不变画星部分不用特意去记,根据题意分析二段性就可以得出,求中间值的方法可以这么想,当求左端点时,当数组元素为偶数个数时中间值有两个,mid落在左边那个,对应的计算方法就不要+1,反之求右端点时mid落在中间值右边那个,计算方法要+1,循环判断条件都相同。更万能的记忆的方法,当if条件语句中出现了减法,那么中间值的计算就要+1。
2025-07-20 09:51:04
1190
53
原创 【C++】类型转换
如果,或者,或者,就需要有以下两种形式:1.隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败2.显式类型转化:需要用户自己处理:转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换。
2025-06-10 19:18:44
1300
26
原创 【C++】特殊类设计
如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。1.定义一个成员函数使得能new一个在堆上创建的对象,加上static修饰,可以使该函数属于类,它的调用不在依赖于实例化的对象,而是直接通过类名+访问限定符就可以直接访问。一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块享。
2025-06-03 10:55:16
1349
34
原创 【C++11】智能指针
借此,我们实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处:1.不需要显式地释放资源。2.采用这种方式,对象所需的资源在其生命期内始终保持有效智能指针原理:1.RAll特性 2.重载operator*和opertaor->,具有像指针一样的行为。
2025-05-28 09:52:01
1106
31
原创 【C++11】特性详解
左值引用核心价值是减少拷贝,提高效率。右值引用核心价值是进一步减少拷贝,弥补左值引用没有解决的场景,如传值返回右值引用对内置类型没有意义,代价不大,最大一般就8字节,要关注消耗空间内存的大头,如一些数据结构的拷贝。浅拷贝的类代价略大于内置类型,移动构造不需要实现,没有什么需要转移的资源,只能是直接拷贝1.自定义类型中深拷贝的类,必须传值返回的场景返回值ret被识别为右值(将亡值),ret1处发生移动构造直接继承指向ret的资源空间,ret接收ret1的资源空间出生命周期后直接销毁释放。
2025-05-26 11:16:27
1226
28
原创 【C++】位图+布隆过滤器
布隆过滤器优点增加和查询元素的时间复杂度为:O(K), (K为哈希函数的个数,一般比较小),与数据量大小无关哈希函数相互之间没有关系,方便硬件并行运算布隆过滤器不需要存储元素本身,在某些对保密要求比较严格的场合有很大优势在能够承受一定的误判时,布隆过滤器比其他数据结构有这很大的空间优势数据量很大时,布隆过滤器可以表示全集,其他数据结构不能使用同一组散列函数的布隆过滤器可以进行交、并、差运算布隆过滤器缺陷。
2025-05-22 10:11:02
1342
30
原创 【C++】unordered_map与set的模拟实现
用一个模板参数T来表示数据,unordered_set为key,map为pair<K,V>,实现了泛型。
2025-05-18 13:15:38
1413
30
原创 【C++】红黑树
_kv(kv),_col(RED){ }与AVL树相比,将平衡因子替换成颜色。为什么默认将新插入节点颜色给成红色?因为给黑色导致该路径黑色节点增加,红黑树性质每条路径上黑色节点数量相同,这样会导致所有路径节点发生变化。而给红色,当前路径违反了不能有两个连续红色节点性质,进行局部颜色调整和旋转即可。
2025-05-10 18:39:54
1355
33
原创 【C++】AVL树
与普通二叉搜索树节点结构的主要区别在于AVL树节点增加了平衡因子和父节点指针:1.平衡因子:用于记录节点左右子树的高度差,帮助维护树的平衡。普通二叉搜索树没有这个概念,不保证树的平衡性。2.父节点指针:方便在进行旋转等平衡操作时,快速定位和调整树结构。普通二叉搜索树通常没有这个指针,因为其操作不需要频繁回溯父节点。方便更新平衡因子。
2025-05-06 11:33:59
1076
30
原创 【C++】二叉树进阶面试题
根据二叉树创建字符串,最近公共祖先,二叉搜索树转化成排序双向链表,根据前序和中序构造二叉树,前中后序的非递归实现
2025-04-24 23:31:55
860
37
原创 类和对象(上)
C语言结构体只能定义变量,在C++中结构体内不仅可以定义变量也可以定义函数。class为定义类的关键字,classname为类的名字,{}中为类的主体。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1.声明和定义全部放在类体中,若成员函数在类中声明定义,编译器可能将其当成内联函数来处理。2.类声明放在.h文件中,成员函数定义在.cpp文件中,成员函数名前需加 类名::!!!,可根据函数代码量来确定哪一种方式,一般第二种更稳妥。
2025-03-06 07:40:19
1050
27
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人