注意的:
1、对于 map<int,char>
这种以 char
为值的,当键不存在的时候,返回 false
例如:
#include<iostream>
#include<map>
using namespace std;
const int N = 100010;
int q[N];
int main()
{
map<int,char>mpp;
// cout<<"jbcwscv"<<mpp[5]<<"bckbkueya"<<endl;
cout<<"bfwbiwek"<<endl;
if(mpp[5]==false) cout<<"???"<<endl;
return 0;
}
没做的:
1、AcWing 14. 不修改数组找出重复的数字 :
https://www.acwing.com/activity/content/problem/content/209/
2、
树相关:
1、重建二叉树:
https://www.acwing.com/activity/content/problem/content/213/
题解:https://leetcode.cn/submissions/detail/440659919/
DFS&BFS:
矩阵中的路径:
是对于是否有路径的精妙判断:有返回值,怎么处理返回值的方法
https://www.acwing.com/activity/content/problem/content/218/
dfs处理区间,一段区间一段区间处理:
AcWing 46. 二叉搜索树的后序遍历序列 :
https://www.acwing.com/activity/content/problem/content/241/
注意:这道题 事实上 还有一种做法,由于二叉搜索树的中序遍历就会得到一个有序序列,同时这道题中说明,二叉搜索树中的元素值各不相同,因此,可以直接获得中序遍历和后序遍历的序列,看是否可以组成一个合适的 二叉搜索树 – 我的思路是看 找到后续遍历序列中的左树内容 和 中序遍历的左树内容是否一致,右树同理
这个是同样用中序后序序列做的,但是和我的思路不太一致:https://www.acwing.com/solution/content/12966/
AcWing 47. 二叉树中和为某一值的路径 :
https://www.acwing.com/activity/content/problem/content/242/
路径搜索并记录路径的题目,我TMD就很好奇,为什么 这里需要把路径抹除痕迹的时候,是在 把left和right都加入到序列之后呢?为什么不像是有些经典的题目那样,对于 Choice Set 中的每一个 choice ,都在选择后 将该选择重置为0 ,并清除痕迹
– 这是因为,对于这种需要对每个choice 进行选择,选中该choice 进入 dfs() 前,都会将该choice 打上标记 ,不让接下来递归进入的状态还能选中这个choice
– 然鹅,本题,当前的状态只有 选择 左儿子 和选择 右儿子 两种选项,但是,当前的状态选择不会在接下来的dfs()递归中被再次遍历到,(因为树 是一个 有序的、从上而下的结构),因此,我们无需对自己选择 左儿子 或 右儿子
这个操作打上标记,而记录路径这个操作 又是在 dfs() 开始处 对 root 执行的,因此,我们在对 Choice Set 中的 choice 没有打标记,也没有记录路径操作,因此,就在 从dfs() 返回时,将 choice 的标记删除或是将路径抹去
但是,我们对root有操作,将root加入到了路径中,并因为root的加入修改了sum值,因此,当root对应的递归结束要返回到 调用该root的位置处时,应该将root 的痕迹抹去(即,将sum值减去,将 root 从 path集合中弹出)
【那为啥不是调用这个root 前加上标记,在调用root后去除痕迹呢?】– 核心原因是:因为这是两种写法hhhh,视同意思录下的不同写法,应用于不同的特点,如下述:
–因为。我笔记上的方法是需要每次在 Choice Set 中选择的 choice 是要先判断 是否合法,若不合法会忽略掉,但是,若 合法性判断 的代码较复杂,那么就可以 本题采用的 这种实现方式方式 – 在 choice 中自己判断下合不合法,若合法 ,把自己加入到path[]中(等其他题目要求的操作),而后 进入下一步(下一state)的dfs()
,最后,记得要把自己的痕迹清理了【注意:这个最后是指当前以root的参数的这个函数最后,若此时函数体再不去清理痕迹,那么,就返回啦,没机会清理会出错的~】
应该重做的 模拟:
1、AcWing 15. 二维数组中的查找 :1、
https://www.acwing.com/activity/content/problem/content/210/
2、
需要重复 && 有特点的 :
1、AcWing 20. 用两个栈实现队列 :
TIP:使用函数减少冗余写法,引用传参 的时候 stack<int> &a
https://www.acwing.com/activity/content/problem/content/215/