- 数组一般不要定义在主函数内,因为在主函数外部定义会自动初始化,而内部定义不会自动初始化,需要自己手动初始化否则代码报错
- 对于那些题目给n个点或者n个人,n件事等等这些,一定要考虑n等于1的情况,该特判就特判
- h数组的更新不要写到add后面否则输出0,也就是说不能写到算法函数里面,最好写到main函数的开头
- 如果不知道某个数的范围,就把数组能开多大就开多大,要不然容易段错误
- vector容器中有几个元素,大小就是多少,只有一个1e9,大小就是1
- map中的元素地址不是连续的,但是是通过链表来连接的,通过调用find函数可以找到目标元素的指针,在通过指针就可以与这个元素相关的元素.
- 如果输入的数据大于1e5,一定记得关流.
- 对于一个数列,如果要维护剖去中间一部分(长度固定且连续)后的剩余数字的递增顺序,可以用set,先把所有数字加进去,再把剖去的一部分删掉,如果剖的的这部分动态向右移动,则右端点删掉,左端点加入set中(如果递减顺序就先reverse)
- 一定要多定义函数,如果一大段代码围绕一个数组实现操作,那么通过修改数组或者传递一个类似的数组,可以实现相似功能.
10.如果数据足够小,优先考虑dfs暴力搜索
11.容器vector如果不在一开始初始化,就要考虑后续操作是否越界.
例如里面只有5个元素,如果调用a[10]就会段错误.不初始化的话,就用push-back扩容
12.善于运用多维数组,比如表示二维坐标系上两个坐标之间的关系用四维数组
13 se.lower_bound(sum); 时间复杂度为 O(logn),lower_bound(se.begin(), se.end(), sum); 只能通过迭代器进行线性查找,没有利用 std::set 的内部结构信息,所以时间复杂度是 O(n),性能相对较差。
14;bfs算法里面,st数据表示这个坐标是否被访问过,所以一个点在进入队列的同时把st设为1,不要出队才设为1,这样会导致内存超限