2022-10-15
DFS/回溯以整数拆分为例:
剪枝条件
当和为n时,保存结果
当和大于n时,进行剪枝
在DFS中,同一排的结点是在同一个函数调用中进行处理,如上图中的第一排,1、2、3、4、这4个结点是在第一次函数调用中进行处理。
因此使用一个for循环来处理同一排的结点。因为元素可以重复取用,本来for循环的起始位置应该都为1,但是为了避免重复,我们可以假设...
Read More
2022-09-15
代码任务结构体//任务结构体using callback = void(*)(void*);struct Task{ Task()=default; Task(callback function,void* arg): function(function),arg(arg){} //函数指针 c...
Read More
2022-09-10
Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。
前缀树的3个基本性质:
根节点不包含字符,除根节点外每一个节点都只包含一个字符。
从根节点到...
Read More
2022-08-30
自带的宏常量int N = INT_MIN;int N = INT_MAX;const int INF = 0x3f3f3f3f; //通常用来代替最大值,防止运算过程中溢出
字符串判断函数isdigit(c) //判断c字符是不是数字isalpha(c) //判断c字符是不是字母isalnum(c) //判断c字符是不是数字或者字母tolower(c...
Read More
2022-08-26
多态静态多态:静态多态是指在编译时实现的多态,比如函数重载,看似是调用同一个函数其实是在调用不同的。
函数重载为什么不能通过返回值实现?
因为函数重载的解析是在编译阶段进行的。编译器根据函数名和参数列表来确定要调用哪一个函数。
动态多态:动态多态是在运行中实现的,当一个父类对象的引用或者指针接收不同的对象(父类对象or子类对象)后,调用相同的函数会调用不同的...
Read More
2022-08-16
C++规定重载后的运算符的操作对象必须至少有一个使用户定义的类型
使用运算符不能违反运算符原来的语法规则
不能修改运算符的优先级
不能进行重载的运算符:成员运算符.、作用域运算符::, 条件运算符,sizeof运算符等
<<运算符的重载
使用全局函数(友元函数)进行重载
s.operator<<(cout);可以简写为:s<...
Read More
2022-08-15
左值和右值左值:有地址的值
右值:只能放在等式右边的值
常量
将亡值
算术表达式int f(){ return 10;}int i = 10;//i左值,10右值int j = f();//将亡值,用完即销
函数返回值为左值引用,就可以放在等式左边int& GetValue() { static int value =...
Read More
2022-06-15
图灵机
一个图灵机计算所涉及的所有输入、输出和计算过程中产生的数据都存储在有限个存储带上,存储一个字符需要占用一个存储带上的一个单元。
一个图灵机是根据它的读写头所在的单元进行操作的,它或者改变单元中的字符,或者移动它的读写头到相邻的一个单元,也就是说,图灵机的复杂性度量是由比特运算决定的。
时间复杂度:随着问题规模的增大,算法执行时间增长的快慢。它可...
Read More
2021-10-05
递归分析递归问题可分为以下三个步骤分析:
1、递归函数功能
2、递归终止条件
3、递归关系式
//n!//1、递归函数功能int f(int n){ //递归终止条件 if(n==1) return 1; //关系式f(n)=n*f(n-1) return n*f(n-1);}//一次可以跳上1级台阶,也可...
Read More
2021-09-18
两个的区别
在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的,但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,从而导致指针悬挂现象,所以,此时,必须采用深拷贝。
//系统默认的构造函数class Wi...
Read More