- 博客(22)
- 收藏
- 关注
原创 C++的next_permutation函数与排列问题解法
是C++标准库中的全排列生成函数,其核心功能是按照字典序生成给定序列的下一个排列。// 默认使用<比较// 自定义比较函数返回值:存在更大排列时返回true,否则返回false并重置为最小排列12时间复杂度:O(n),n为序列长度必须先将序列排序为最小字典序,才能生成所有排列直接修改原序列,生成新排列支持自定义比较规则处理特殊顺序(如大小写混合排序)字典序的本质:排列的比较规则类似于字符串比较,213132因为首位2>1逆序检测:当。
2025-03-02 15:20:26
818
原创 离散化思想的简单应用
离散化是一种将大范围数值映射到紧凑区间的技术。当数据值域跨度极大(如1e9)但实际数据点稀疏(如1e5个)时,直接使用数组处理会浪费大量空间。此时可将数据映射到连续的小范围索引,从而高效处理。
2025-02-22 14:13:52
859
原创 回溯算法中关于剪枝的一些应用
剪枝是回溯算法的灵魂,核心在于通过问题特性提前终止无效递归。关键步骤明确问题的约束条件分析决策树中哪些分支必然无效设计剪枝条件,用代码实现提前终止通过排序、哈希表等工具辅助剪枝判断。
2025-02-05 12:14:58
667
原创 区间增减操作——差分数组
给定一个数组a,其差分数组diff(第一个元素保持不变);对于i > 0(当前元素与前一个元素的差值)。差分数组的性质差分数组的前缀和可以还原原始数组。对差分数组进行区间更新操作,可以高效地反映到原始数组中。差分数组是一种非常实用的工具,特别适合处理区间更新问题。它的核心思想是通过记录相邻元素的差值,将区间更新操作转化为单点更新操作,从而大幅提高效率。
2025-02-03 21:55:03
790
原创 小根堆和大根堆——优先队列问题
堆序性:每个节点的值都大于等于(或小于等于)其子节点的值。大根堆:每个节点的值都大于等于其子节点的值,根节点是最大值。小根堆:每个节点的值都小于等于其子节点的值,根节点是最小值。完全二叉树:除了最后一层,其他层的节点都必须填满,且最后一层的节点都靠左排列。堆是一种高效的数据结构,在解决优先队列、TopK问题、堆排序等问题时具有显著优势。理解堆的性质和操作,并掌握其应用场景,对于提升算法能力和解决实际问题至关重要。希望本文能够帮助你更好地理解和应用堆结构!有一堆石头,每块石头的重量都是正整数。
2025-02-03 21:22:16
1258
原创 出栈序列问题——卡特兰数
卡特兰数(Catalan Number)是一系列在组合数学中经常出现的自然数。卡特兰数的第 n 项(记作c n表示许多组合问题的解的数量。C01C11C22C35C414C542C01C11C22C35C414C542Cn1n12nnCnn11n2n其中,2nnn2n是组合数,表示从 (2n) 个元素中选取 (n) 个元素的组合数。栈的性质。
2025-02-02 21:46:43
871
原创 A+B problem(高精度加法)
感觉网上的高精度加法很多都很麻烦,lz写了一个可能 还算简单的,给大家参考(自留)好难好难,感觉没有头绪哇。
2025-01-24 18:08:09
328
原创 详解类和对象——2.对象的初始化与清理(1)
构造函数可以传入参数。析构函数不能传入参数。意味着构造函数可以发生。A.如果我们不提供构造和析构,编译器会自动为我们提供这两个函数,A.按照参数:有参构造(默认构造),无参构造。:由编译器提供的构造函数和析构函数是。为了解决上述两个问题,c++提供了。B.按照类型:普通构造,拷贝构造。是两个重要的安全问题。注意事项见如下代码块。
2025-01-17 11:27:02
458
原创 详解类和对象——1.封装
(3)私有权限:private 类内可以访问,类外不可以访问。(2)保护权限:protected 类内可以访问,类外不可以访问。(1)公共权限: public 类内可以访问,类外可以访问。优点二:方便检测数据的有效性。(加一个if 条件判断)(1)将属性和行为作为一个整体来表现生活中的事物。(2)将属性和行为放在不同权限下加以全面控制。在c++开发中我们一般将成员属性设置为私有。封装是c++面向对象编程的三大特性之一。class <自定义类名>{优点一:自己控制读写权限。
2025-01-14 22:32:28
307
原创 详解程序内存模型——内存四区
划分内存四区意义:不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程。(2)全局区还包含了常量区, 字符串常量和其他常量也存放在此.把堆区的地址用栈上的指针来储存。分配和释放,若程序员不释放,程序结束时由操作系统回收。的,对于频繁被使用的代码,只需要内存中有一份代码即可。分配和释放,若程序员不释放,程序结束时由操作系统回收。3.栈区:由编译器自动分配释放, 存放。在程序编译后,生成了exe可执行程序,*由编译器自动分配释放,存放函数的。原因: 栈区开辟的数据由在。,由操作系统进行管理的。
2025-01-12 18:59:35
623
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人