写在前面
要学习算法首先要理解算法,然后能够通过代码实现对应功能,做题是一种检测你对算法理解度的方法
我会列出几个比较主流的在线测题系统,也就是大家说的oj,然后分别介绍它们的侧重点以及使用方法
一、洛谷https://www.luogu.com.cn/
我最看重洛谷的是什么呢,它有大量的模板题,一个模板题大概就对应一种算法,如图,用户进入洛谷首页后点击左侧的题库,然后再查找题目里面输入[模板],就可以得到大量的模板题:
这些模板题用户只需理解算法然后将其用代码实现大概就能正确通过了,掌握了基础的模板以后遇到相似的问题只需将模板代码修改以下就能解决。
那么怎么学习算法呢?
我们点击进入题目界面
可以看到右侧有一个[查看解析]的按钮,我们再点击进去
通常模板题的解析里面会有大量的大神给出该算法通俗易懂的解释以及代码
用户理解算法之后即可实现代码对该题进行求解
实现代码后发现有bug,不能同通过全部题目样例,把解析里的代码抄过来就好了, 通过与解析里的代码作对比,找到自己实现的代码中隐藏的bug,解决、ac、睡觉
做完模板题后就可以去做相同标签的题,加深对该算法的理解以及学会灵活地使用该算法
二、力扣https://leetcode-cn.com/
力扣的话呢比较侧重开发,在面试前一定要多刷力扣的题
进入题目界面看看
可以看到它是给你一个Solution的类,然后要你通过实现类方法来解决对应的题目,比如上面的题目的一种解决方法如下
它与我们之前接触到oj的做题方式最大的不同就是力扣上面的题是不用自己将一个代码文件从头写到尾的,我们只要在类方法里面实现对应的方法,然后将答案返回即可。同样的它也有各路神仙给出的题解(废话)
面试前一定要刷力扣!!!面试前一定要刷力扣!!!面试前一定要刷力扣!!!
三、Codeforceshttps://codeforces.com/problemset
Codeforces呢就是一个国外搞的知名算法平台了,操作跟平时我们接触到的oj差不多,就不展开说了。Codeforces里面的题比较偏向思维,大部分的题实现的代码都不会太长,想要训练思维的话就从难度800左右开始做题吧,然后通过练习提升理解题目的速度以及实现代码的速度,比如3分钟切一道(逃)
四、其他常见的算法平台
牛客网 https://ac.nowcoder.com/acm/problem/list
Virtual Judge https://vjudge.net/problem