【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√

前言

相信很多同学都和我一样,在学完数据结构与算法的时候,知道自己学了什么算法,但是碰到实际题目的时候就算知道用什么算法解决,但是很难亲手用代码实现,这里就总结以下我的学习方法,希望能对大家有些参考。我的编程水平?大学前计算机零基础,Leetcode周赛首题签到,PAT乙级50分,刷过的应该知道我有多菜。因为我觉得刷题可能比书上的长篇原理更能加深理解,所以我是主要总结刷题这一块的学习方法。有什么不对的地方请指出,必定及时学习改正。

编程语言选择

既然是刷题,肯定要选一门语言。我这里列举一下几个热门的编程语言(来源:PTA各种语言程序样例):
以下样例程序可用于解决这道简单的题目:读入2个整数A和B,然后输出它们的和。

C语言:

#include 

int main()
{
  int a, b;

  while(scanf("%d %d",&a, &b) != EOF)
    printf("%d\n", a + b);

  return 0;
}

C++:

#include 

using namespace std;

int main()
{
  int a, b;

  while (cin >> a >> b)
    cout << a+b << endl;

  return 0;
}

Java:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int a = in.nextInt();
            int b = in.nextInt();
            System.out.println(a + b);
        }
    }
}

Python3:

while True:
    raw = input()
    if raw == '':
        break
    print(sum(map(int, raw.split())))

以上四门语言是最常见的几门语言,如果要刷题最好选择热门的编程语言,原因很简单,因为有题解;其次是有些在线测试平台是不支持冷门语言的;还有就是热门语言有它热门的道理,上手快,相关的学习资料多
这里大概列出本人使用这四门语言刷题的一些对比

编程语言 优点 缺点
C语言 入门语言无需再学习语法,相关学习资料多 能调用的库少,需要自己底层实现一遍
C++ 刷题最热门的语言,题解多,有STL库方便调用 面向对象部分学起来有点难(其实刷题很少用
Java 市场需求大,对以后找工作帮助大 除去核心代码的部分有点长
Python3 一行至上,简洁高效,调库出奇效 因为语言的问题,遇到大数据可能会超时

总之,我觉得如果用一门单刷的,推荐C+(我自己命名的),简单说就是使用C++的库,但是不深入C++的一些语法,比如面向对象之类的。如果要灵活刷的,建议C++Python,原因是这两门语言差的相对大一些,互补性强。当然如果你像我时间多,并且有浓厚的兴趣,不妨可以尝试四门语言全都要,甚至全部语言。

刷题平台推荐

选完了语言就可以快乐刷题了,那么我们该去什么平台刷题呢?这里推荐几个我常用的刷题平台。

PTA(拼题A)←传送


适合初学者刷题,PAT考试的大部分题目都有,主要是教学用的,部分学校会用这个平台布置作业和考试,浙江大学等学校的MOOC会在这里开设练习题目集。公共题目集里有浙江大学教材的配套练习集和PAT配套练习题,在商店里还可以购买时光机进行模拟考试和一些校招题目。题目的难度不大,毕竟是主教学的。个人接触时间最早,也是最长的平台了。(每周能在上面做几小时的作业)

LeetCode(力扣)←传送

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第1张图片
和别的平台不一样,LeetCode屏蔽了输入输出的处理,主要是写一个核心的函数,所以刷一道题的时间会相对短一点,适合碎片化时间刷题,而且题解相比别的平台会多一点,能看到不同的解法和不同的语言,比较灵活。当然,英语好的话,建议直接刷LeetCode的英文版,可以见到别的国家大佬的不同奇妙解法。

牛客网←传送

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第2张图片
主要是一些求职题库,各大公司的一些模拟题目,有好多求职信息,如果有意向找实习或是毕业找工作的同学,可以去上面刷刷,有些面经也有总结。另外,牛客竞赛也是可以去练练手,虽然有点偏向竞赛的,但是简单题也是可以做做的。

洛谷←传送

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第3张图片
有很多模板题目,适合我们在学完一个算法后上去及时实践。看上面的题解和评论感觉自己又年轻了。应该是偏向中小学大佬的竞赛练习平台?我感觉可能是这样的,界面相对简洁清新。

学校OJ平台

个人见的比较多的是POJ、ZOJ和HDU,这类学校OJ每道题旁边一般是不会设什么讨论区或者题解的。基本上是给本校选手打校内训练赛或者举办邀请赛用的。有些学校是不对外开放OJ平台的。如果学校有条件的话,可以像我一样在旁边边缘听听他们竞赛的题解,可以收获一些没有见过的巧妙解法。毕竟搞竞赛的思路什么的肯定比我这种只会刷刷简单题的不一样。

竞赛平台

著名的OJ平台还有什么CF之类的,有一定难度,如果有兴趣的话可以去尝试尝试。

另外还有些没提到的,可能是我还没有见到,总之要选择最合适自己的平台去刷题,最好不要专一的刷几个平台,针对训练。

刷题技巧总结

1.温故知新

可以把刷过的题目归类,比如什么知识点下面刷过了什么题目,比如这是PAT甲级的,参考知乎回答,方便回去查看。【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第4张图片
同样,可以把错题整理成一个错题集,以后做题前回顾以下自己曾经的错误,可以防止重复踩坑。
【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第5张图片

2.熟能生巧

前人写好的库,不就是为了能方便写代码吗?有些可以直接一行代码解决的,为什么要自己再实现一遍?(一般考试时间短,建议记一些写好的函数,直接调用)这里举几个常用的,比如C++的STL,Python的collections等加强的数据结构库等可以缩减代码,用正则表达式库处理字符串。

3.以错改错

有时候代码通不过,会有返回错误信息和获得分数。编译错误可能是什么打错了。答案错误应该是逻辑有问题。运行超时基本是算法的问题了,也有可能是输入输出超时。格式错误检查一下输出的空格、换行之类的。

4.知难而退

有些题目自己做的时候,不管怎么做都做不出来,可以去看看别的大佬的题解,可能你在读题的时候就已经偏离了提意,看别人的题解也是一种学习。

5.知难而上

即使错了,也要多试几次,不要试过一次就去做别的题了。可以通过调试工具一步一步找出自己的错误,多错几次,以后遇到就能节省时间。

6.总结归纳

我不知道大佬们是不是都喜欢整理一套自己的模板,比如树、图、链表等有些自己固定的写法,个人觉得总结一套自己的学习方法也很重要。各种平台都会有什么刷题宝典、动画解算法的,能自己总结出一套刷题技巧是更好的。考虑每天刷题写个日志记录一下心情也是一段宝贵的回忆。

7.快乐分享

可以把自己刷题的题解放在博客等公开平台上,和别的同学交流题解,你会发现不管是大佬给出的绝妙解法,还是萌新问的一些神奇问题,都能有意外的收获。

学习资料总结

这里大概列一下我平常收集的资料。

书籍

1.算法竞赛入门经典(第2版)

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第6张图片
书不难,非ACMer大部分看得懂,亲测。比算法导论这种入门书籍好理解一点。

2.算法笔记

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第7张图片
玩转研究生复试上机考试和PAT甲乙级考试, 突破CCF的CSP认证或其他算法考试, 求职面试的基础算法,海量例题实战解析,简单说,很实用。

3.算法竞赛——入门到进阶

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第8张图片
罗勇军老师的书,在CSDN也有老师的博客,可以去看看老师写的算法专栏→罗勇军←。虽然这本书的书名是算法竞赛,但是写的内容并不是很深,适合对算法有兴趣的同学看。有些算法确实平时编程用不到,但是能巧妙地解出题目也是很有成就感的。

怎么可能只有这么点,后期看了再更新。。

博客

我寻思着CSDN平台上推荐别的平台博客不是很好,我就找了点CSDN写题解不错的博主。

1.柳婼

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第9张图片
通称柳神,主写PAT和蓝桥杯的题解,多用C++语言写题解,代码精简,看了以后会发出为什么代码能这么短的感叹。

2.RabbitMQ!!!

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第10张图片
主写LeetCode和剑指Offer,多用Java语言写题解。

3.Alex_McAvoy

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第11张图片
主写洛谷、POJ、HDU等平台题解,还有竞赛一些算法总结,多用 C++ 写题解,目前看到分类专栏看上去最完整的。

4.Brielleqqqqqqjie

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第12张图片
主写PTA顶级、甲级和剑指Offer题解,多用 C++ 写题解。

5.浒鱼鱼

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第13张图片
针对PTA甲级考试写题解,多用 C++ 写题解。看的人不多,最近发现的,个人觉得最近要考甲级的同学可以看看。

6.Michael阿明

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第14张图片
新发现的大佬,主写LeetCode、剑指Offer等,多用 C++ 写题解,每次把自己的LeetCode周赛及排名附在上,虽然也不是前百分之一水平的巨佬,但是很真实。

7.葑鈊丶

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第15张图片
最后推自己不过分吧。。只更了PTA-Python题库,占了我博客99%的流量,也没有完美的解析,但是喜欢用Python3刷题。

又发现新的大佬会继续补充的。

视频

这里主要推万能的学习平台bilibili了,如果问我慕课能看什么的话,我之前有写过一篇:【杂谈分享】找不到自己想学什么?中国大学MOOC计算机方向课程推荐√

1.大红豆小薏米

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第16张图片
Python语言LeetCode题解,偏向具体题目的算法讲解。

2.塔罗塔罗兔

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第17张图片
C++ 语言LeetCode题解,偏向直播,看题不如看小姐姐系列。

3.一俩三四五

【杂谈分享】非ACMer怎么快乐刷题?从语言入门,到刷题实践——万字刷题学习总结√_第18张图片
C++ 语言LeetCode题解,偏向周赛的实况和讲解。

刚入坑,平时推荐刷到的就放上来了。搜了一圈好像没有专门刷PTA的UP,别的平台也很少,有发现新的就更上来。说不定下个就是我。

后记

这只是我的一些刷题的学习总结并没有涵盖所有语言,所有平台,主要是以考研和找工作为主的一些刷题,非ACMer向的,我也很敬佩各位大佬,没有能力参加ACM,甚至觉得会有些遗憾。日后发现新的,会补充上去,另外自己也会更新一些新的题解。 希望大家能找到属于自己的学习方式,最后希望大家刷题愉快!

你可能感兴趣的:(杂谈分享)