工具分享
画图
- https://excalidraw.com/
大家平时刷题可以用这个网站画草稿图帮助理解!如果看题解很蒙或者思路不清晰的时候,跟着程序处理流程画一个图,90%的情况下都可以解决问题!
数据结构可视化
- https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
数据结构和算法可视化可以看这个网站,还可以互动添加元素等,非常直观让你快速理解! - https://oi-wiki.org/ds
数据结构的百科全书,除了基础的数据结构外还有很多进阶的内容,学有余力的同学可以尝试成为OI佬。
java 相关 api
- https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html
这是Java的Deque容器的官方文档,这个容器非常重要,作为Java选手一定要牢牢掌握。他是一个双端队列,常用来当栈和队列使用,api也是非常丰富,刷题过程中出现频率很高!之后就是关于看文档的问题,大家遇到api不清楚的情况下第一时间要学会去看官方文档,这是第一手资料,往往是最准确的,包括大家之后工作中遇到问题也要养成这种能力,还有阅读英文文档的能力。
力扣插件
-
- https://github.com/zhang-wangz/LeetCodeRating 可以显示题目难度对应的leetcode周赛难度分(如果这道题曾经在周赛中出现过)
- https://github.com/XYShaoKang/refined-leetcode 可以帮助记录做题时间,打开做题页面就会开始计时,这样可以帮助大家知道解出这题花费了多久,也可以更合理地安排时间
- VSCode的力扣插件可以不用开会员进行断点调试,大家要学会自己有debug的能力
-
-
本地 IDE Intelli 中优雅的刷题方式
https://blog.csdn.net/BuleFACE_Zhang/article/details/135856136?utm_source=miniapp_weixin
各语言常碰到的问题汇总
c++
-
c++ 中文参考手册
-
C++函数指针与仿函数:自定义排序规则 关于C++的一些自定义排序规则方法
-
遇到看不懂的方法的时候(C++),可能是宏定义, 方法本身就是一个 宏定义,所以要找到定义他的地方,这种项目的代码 估计宏定义满天飞,如果没有好的文档,代码很难看
-
自增自减运算符只能用于变量;不能用于常量和表达式。
-
在使用map容器存储多个键值对时,容器会自动根据键值对的键大小,按照既定的规则进行排序(默认升序,可以自定义)
-
使用map存储的键值对,键既不能重复也不能修改
-
multimap和map的区别在于multimap容器可以同时存储多个键相同的键值对
-
c++很多容器都有find(x)函数:在容器中查找x值,如果找到则返回指向该值的迭代器,否则返回和end()方法结果一样的迭代器
-
优先队列(priority_queue) 是在队列的基础上添加了内部的排序,本质上是一个堆来实现的;其提供的函数和队列的操作基本相同
声明:priority_queue<Type, Container, Funcitonal>
其中,Type指数据类型, Container指容器类型(必须是数组实现的容器,如vector,deque,不能是list。STL中默认是 vector),Functional 指比较的方式,当需要用自定义的类型时才需要传这三个参数,使用基本数据类型时,只需要传入数据类型即可,默认构造是大顶堆
一般构造为: -
- 小顶堆 priority_queue<int, vector, greater> heap;
- 大顶堆 priority_queue 或者 priority_queue<int, vector, less> heap;
- greater 和 less 是 std 实现的两个仿函数(即使一个类的使用看上去像一个函数,其实现是类中实现一个operator(),这个类就有了类似函数的行为)
- 对于 pair 类型,比较时候先比较第一个元素,第一个相等再比较第二个
-
注意 迭代器不能与NULL做比较
-
常用的字符串拼接方式有三种:1. 直接用”+“拼接后在赋给对应值,2. “+=",3. string中的append方法,那么这三种方法有什么区别,效率如何?
“+=“和append方法效率远远高于”+”,因为”+“在每次拼接后会在 内存Q中创建一个新对象,然后将拼接后的字符串赋值给新对象,频繁的创建对象与拷贝消耗了大量时间。而”+="和append每次直接在原字符串进行拼接,直到字符串capacity不够时,才重新分配空间(需要一次对象创建和拷贝)。 -
关于c的&, 建议大家好好看一下c中&的用法, 加了跟没加主要就是方法内部是否会改变本身, 也就是引用地址
-
对于频繁插入的场景,C采用list进行插入提高速度(相比于vector),但需要注意C的list迭代器为双向迭代器,不是随机访问迭代器,只能一步一步移动
-
注意:C++传入函数最好都使用引用,能够大大提高效率
-
c++中不加&会复制一份数组,加了是引用不用新建一个数组
-
c++在打比赛的时候有的时候会卡常数,有时候vector过不了数组能过