MDGSF Software Engineer

[算法学习] 刷题入门指南

2020-02-13
mdgsf
Art

毕业好几年了,由于算法这个比较复杂难懂,一直也都没怎么花时间在上面。 但是在其他东西学了一大堆之后发现算法这东西是绕不开的,只要你在做软件开发, 多多少少是会碰到需要用到的地方的。于是我就开始计划刷题。 我通过下面的一系列问题,来帮助一个新手快速入门刷题。

我们为什么要刷题?

  • 提升个人的软件基础修养,会些数据结构和算法,代码写出来会好很多。
  • 面试一定会问。我就没有见过面试不问数据结构和算法的。

刷题到底有没有用?

我们大学的时候,学习的更多的是偏理论的。随便拿一个题目出来, 没有刷过题的基本上都是做不出来的,但是一看答案,哦原来如此。 其实这就是因为没有刷过题。 如果你高中的时候数学只学了一些概念,都不做题的话,就去高考,你觉得自己能考得好吗? 这是不可能的。刷题可以让你学习的理论能够运用到具体的实战中去。

那要到哪里去刷题呢?

推荐一个刷题网站:

leetcode中国站 刷题,因为国内访问速度更快。

leetcode国际站 看题解,因为国外的题解质量更高,不过是英文的。

另外,不推荐传统的 OJ 平台,因为太难用了,对新手来说太难了,也不友好。

  • 只告诉你错了,却不告诉你哪个测试用例错了。
  • 需要自己从终端读取数据作为输入,有的数据输入是很难处理的。
  • 题目没有区分简单、中等、困难,不利于渐进式学习。很多时候, 对于我们做应用软件开发,会做简单的题目就够了,而困难的题目更多是竞赛才需要的。

那要用什么语言刷题呢?

一般来说,你主要写哪个语言,就用哪个语言刷?但是你要是不知道要用哪个的话, 我推荐用 Python,简单易学,还很好用。不建议使用像 C 语言 这种连 哈希表都没有的底层语言,但是 C++ 是可以用来刷题的,因为 C++ 有 STL 库。

要怎么正确的刷题?

五遍刷题法

  • 自己先思考 5 分钟,有想法自己先做一遍。没有想法就直接看题解,看懂之后做一遍。
  • 没有想法看题解的话,要自己不看题解再做一遍。
  • 第二天再做一遍。
  • 一个星期之后再做一遍。
  • 面试的前一个星期再做一遍。

五遍刷题法的核心思想在于过遍数,你一天刷个几百遍是没有用的,要每隔一段时间就刷一遍。 因为这是符合人类的遗忘曲线的,也叫做“艾宾浩斯记忆曲线”。

刷题最大误区

  • 刷题只刷一遍。刷一遍是远远不够的。
  • 我要自己想出题目的解法。很多题目你要是能自己想出来的话, 你都可以拿图灵奖了,醒醒吧少年。

估计有的同学对于这个观点不是很赞同。自己以前一直都是想要自己去想题目的解决方法, 结果可想而知,自然是碰到了很多的困难和挫折。 因为很多的算法,比如 KMP,你要是能自己想出来,简直逆天了都。 所以学算法的第一步就是要先清楚的给自己划定一条边界: 你是要学习算法而不是要去发明创造一个新的算法。其实也很容易理解, 你要是没有学习过加减乘除,让你自己去发明加减乘除,试问又有几个人能够办到。 我们更多的时候,是站在前人的基础上。牛顿曾说过:

“我之所以能成功,是因为我站在巨人的肩膀上”

所以对于我们普通人而言,你更多的是需要认真学习。


weixingongzhonghao

Comments

Content