1.遍历树每层多少个节点常用解法(199):
while(!qu.empty())
{
int nSize = qu.size();
for(int i = 0; i<nSize; i++)
{
..........
}
}
2.对于树 的常用算法总结:
1.首先树的三个遍历(先序,中序,后序)以及栈的
3.to_string()将int转换为string 以及string的to_str()将string转换为c的字符串形式
4.辅助类bitset,可以理解为存放的是bool但是优化了空间,只有一位保存每一个元素。
常用操作:
5.位操作符
& 位与
| 为或
^ 异或(同 0, 异1): 作用:0 ^ N = N, N ^N = 0, N1 ^ N2 ^ N3 = N3 ^N1 ^N2
~ 为反
<< 位左移(可以理解为n * 2^n)
>> 位右移 (n /= 2^n)
6.使用与不同的图的数据结构的两种遍历方法BFS(辅助队列),DFS(递归)
关键点用同的方式是用不同的方式记录节点是否已经被遍历。可用bool 数组或者map结构。
7.对于含有数字相乘之类的问题,注意乘结果越界问题。
8.backtrack回溯算法
基本过程都是
backtrack( pos)
{
if(判断后面有没有必要走)return;
if(判断是否达到条件)//process and return ;
可以选择性做一些记录,或者一些判断条件
for(int i = pos; i<end; i++)
{
if(做一些条件判断是否可以往下做)
{
更新记录;
push
backtrack(i+1)
pop
}
}
}
通常外部可以添加一些标志辅助变量。
9.atoi(char *) 如果char* 不合法,则会返回0;如果char *前几位为0,则会省略
10.常用技巧
289.Game of life
利用位来保存状态信息。
48.Rotate Image
利用矩阵变换
73.Set Matrix Zeroes
保存状态信息
随机样本问题,从一个样本,大小为n,取k个元素,使每个元素取到的概率为k/n,关键点,
1.先依次取k个元素
2.取k+i个元素时,以概率k/k+i的概率取,替换sample中的一个元素。
对于矩阵,常用的搜索,DFS,BFS实现手法。以及变种。
注意指针的判定顺序,例如
while(p->val != c->next && p) 顺序有误,应该先判定是否为空,在判定是否值相等。