在线题库整理及一些刷题注意事项
- 刷题站
- CSDN
- 编程语言支持
- LeetCode
- 编程语言支持
- 数据库语言支持
- 牛客网
- 编程语言支持
- 数据库语言支持
- 洛谷
- 编程语言支持
- AcWing
- 编程语言支持
- 蓝桥
- 编程语言支持
- 做题的两种模式
- 调用模式
- 委托模式
- 注意事项
- 小结
刷题站
老顾一个人单打独斗太久了,与现在的发展严重脱节了,在今年又一次活跃起来的时候,发现天下大变。先是各种人工智能产品大爆发,gpt 之类的东西充斥眼球。然后发现以前不算大众的各种算法出现了很多很多题库网站。好家伙,老顾是被吓的一个激灵啊。赶紧跑起来,追随一下现在的潮流。人工智能咱学历低,玩不明白,算法题的话,老顾还是有信心去试试水的。于是就了解了一下现在都有哪些站可以刷题。
CSDN
第一个自然是CSDN啦,老顾是这里的忠实用户,他的题库倒是没有完全放开,从csdn学习进入,点开每日一练就可以做题了,每天刷新三个。听说,可以自己按题号变更。咱也没试过,不知道怎么搞。而且,C站这个,并不支持手机写代码。
编程语言支持
支持的语言种类不多:
Java,C,C++,C#,Python3,go,JavaScript(V8)
LeetCode
第二个是 leetcode ,偏重算法的一个题库。
编程语言支持
算法编程部分,支持的语言种类很多哦:
C++,Java,Python,Python3,C,C#,JavaScript,Ruby,Swift,Go,Scala,Kotlin,Rust,PHP,TypeScript,Racket,Erlang,Elixir,Dart
老顾只会少少的几个。。。。
数据库语言支持
数据库部分,也有几个不同的环境支持:
MySQL,MS SQL Server,Oracle
Shell 和多线程,只有少少的几个题,期待以后得扩充。(虽然老顾完全没见过,还不知道会不会做)
牛客网
牛客网,也是在问答里,有小伙伴提到了,老顾才知道这么个站。
编程语言支持
他这里就分的比较细了,算法编程支持的语言也不少:
Java,C++,Go,Python3,C,C#,JavaScript Node,TypeScript,Python2,PHP,Swift,Kotlin,Scala,Rust,Ruby,Groovy
数据库语言支持
然后是SQL篇,这个就仅仅支持 MySql 了。
python 篇老顾看不到,要会员了。。。
这里的内容,老顾觉得语法篇最适合刚学编程的人来刷一刷,可以加深语法的印象。
洛谷
最近老顾新认识的大佬,问哥就喜欢用洛谷刷题,咱也没刷过,就随便逛逛。
嗯。。。看洛谷自己的介绍,也是偏重算法的
编程语言支持
然后进去看了看语言支持:
Pascal,C,C++14 (GCC 9),C++98,C++11,C++14,C++17,C++20,Python 3,PyPy 3,Java 8,Rust,Go,Haskell,Kotlin/JVM,Scala,C# Mono,Node.js LTS,PHP,Ruby,Perl
我就直呼好家伙,pascal 啊,多古老的语言了,还有就是 c# 后边怎么还有个 Mono?
AcWing
这是问哥介绍的,AcWing也是专注算法的,连个分类都没有。
编程语言支持
支持的语言不多,和CSDN有一拼了:
C++,C,Java,Python,Javascript,Python3,Go
蓝桥
最近又有蓝桥杯比赛,这才听说这个。。。结果跑去一看,好家伙。。。这是从98年就开始的一个赛事了啊。老顾真是孤陋寡闻了。
编程语言支持
蓝桥算法挑战,支持的语言更少:
C++,C,Java,Python3
然后还有各个学校内部的题库,差不多就是这样。
做题的两种模式
说完了题库站,该说说怎么刷题了。
其实,以老顾看来,刷题其实分两种,一种是从输入到输出都可以自己控制的,比如蓝桥,比如C站,还有一种,是只能在现有基础上进行编写的,比如力扣,比如牛客。这两种分别对应了两个模式。
调用模式
如力扣牛客这样的,他会给定你一个类和方法名,你需要在这个类和方法下进行算法实现,而他验证结果的时候,是将这个类加载,调用指定方法,同时从别的地方加载用例,这样的好处就是减少了干扰,减少了骗分的情况。虽然还是有不少可以骗分的题就是了。
委托模式
例如蓝桥、C站这样的,则是另外一种,他完全不管你在代码里胡搞瞎搞些什么,他会用编译器调用你的程序,然后把用例挨个扔给你的程序,然后接收你程序返回的输出内容,具体什么数据类型,什么格式完全不管,这样的好处就是输出灵活,但是结果验证就很难受了,多一个少一个空格都不可以。
这两种模式应对起来稍有一些差异。
对于调用模式来说,他需要注意的一个点:
不要对输入的变量重新赋值,这里主要指的是引用型的数据,比如列表,比如矩阵之类的,很多题目是要求在原数据上进行调整,并不要求返回任何数据,他会根据引用自动比较原有变量的值,但是如果重新赋值(局部改变不算)后,引用地址就会发生改变,造成提交后,结果错误的问题。
同时,因为这种模式,所有的数据都是从外边调用进来的,很难进行骗分。
而他的好处则是,你在方法内可以任意输出信息,而这些信息不会被当做返回的内容,不影响最后结果。
对于委托模式来说,需要注意的点就多了
1、不要盲目相信预先给出的输入代码,很多题目的数据输入部分,他都预先做好了,但是,有很大可能会坑爹哦。比如C站这个《CSDN每日一练:鬼画符门之点点大阵》这个题目,就是经典的输入信息坑死人。
2、对于部分题目,输入部分并没有明确的数量,这类题目的输入控制大多需要自己做,需要自己进行异常捕捉,并确保输入信息不遗漏。
3、正确的读题,绝对除了答案之外,不要多输出那怕一个空格
对于委托模式,他有另外一个好处,就是你可以非常方便的用异常将所有用例都抛出来,在不理解题意的时候,看看用例,猜一下最后答案,有时候这个题目就理解了,就能做出来了。如果实在看不懂题目,如果答案范围比较小,也可以进行骗分的。反正线上编程,没有谁真的看你算法时候足够好。
注意事项
1、正确的读题
不是所有网站都和 CSDN 一样考阅读理解的,仔细读题,不要遗漏任何地方,尤其是输入和输出的部分。
2、正确的接收数据
对于调用模式还好说,他会给你正确的已处理好的数据,类型也是准确的,但是对于委托模式的,很多时候我们需要自己使用 input、readline 之类的方法接收数据,这个时候都是字符型哦,你需要按照输入说明,自己将他们转成或数值或列表,或其他什么东西。
3、在算法实现时,使用调试
大多数的做题站,都会有一个除了提交之外的按钮,可以自行定义示例数据进行测试,要灵活的使用这个哦,毕竟出题方给出的示例相对较少,而且不够强壮,你需要自己写两个用例,看看你的算法是否会出现异常
4、严格按照输出要求输出
不管是哪种模式,对这个多少都有一点要求,比如调用模式的原变量修改,比如委托模式的输出格式要求,还是那句话,除了要求之外的内容,尽量一个字符都不要输出。对委托模式来说,更不要画蛇添足的在输入时加什么提示。你对面给数据的是机器吖,你在给谁抛媚眼?
5、注意时间限制
有些时候,小伙伴们会参加一些竞赛性质的活动,这个时候,会有一定的时间要求,比如 leetcode ,要求就是 10:30 至 12:00 ,并不会因为你晚进场而改变结束时间,而 C 站这样的,则是从进场开始计时,约两小时左右。
小结
好了,一些关于刷题的内容就说到这里,如果有小伙伴有其他刷题站,也可以告知老顾,老顾对这些还是比较感兴趣的。
祝大家都能在疲惫的时候,刷题换换脑子放松一下。