开学三个多月了,但没写过多少代码,感觉再这样下去就废了。所以今天开始LeetCode刷题。这篇文章算是一个刷题的开端,主要写写为什么选择leetcode刷题,怎样刷题等问题。
我觉得要想成为一名合格的程序员需要具备这么几块能力:
刷题能让我锻炼以上能力中的数据结构和算法的能力以及编程能力。因为leetcode中的题目需要用编程语言,比如python,java,c++等来实现,但高效快速的解决问题的方法、步骤则需要数据结构和算法的支撑。因此,刷题对我这两方面能力的提升显而易见。
首先,想要正确编写代码并成功提交需要熟练使用一门编程语言,我主要学习的是python,在使用python解决问题的时候,我肯定会用到一些我没有用过的方法,函数。当遇到比较好的函数的时候,我会把它记录下来,然后将这个函数相关的知识点和使用方法整理成一篇博文记录下来,以备后续的复习巩固。
其次,在代码提交运行的时候,肯定会遇到各种各样的错误提示,这些错误可能是语法错误,可能是逻辑错误。但不管遇到了什么错误,都是一次栽跟头的经历,我要做的是,将这些错误出现的原因,解决方法整理成一篇博文,这样一来,吃一堑长一智,栽跟头栽的多了,以后就能避开这些让你栽跟头的坑!
再次,当你提交之后,系统会给你一个反馈,这个反馈可能是程序出错的提示,也可能是时间超出限制的提醒。如果是前者,那么找到错误并改正就好了,如果是后者就比较尴尬了,这说明你编写的代码运行效率太低了。这时你就需要重新考虑你代码的逻辑。那怎样能写出比较高效的程序呢?没错,数据结构和算法。
当某题需要用到某个数据结构和算法的知识时,我就将相关的知识点学一遍,然后将学习到的内容整理成博文。此时的学习就能够将理论与实践相结合了,Nice!
如果按照上述刷题的方法进行的话,进度会非常非常慢,因为我要做的不仅仅在leetcode刷完一个又一个的题而已,我要做的是通过刷题这种方式来学习编程和数据结构及算法的知识,而且最重要的是,学完之后我要整理到我的博客上。
也就是说,完完整整的刷完一个题我需要经历三个步骤,耗费三个阶段的时间。第一,做题的时间;第二,当不会做的时候,去学习记录的时间;第三,整理成博文的时间。在这三块时间里,第一块和第三块时间是一个输出的过程,第二块时间是一个输入的过程。输入与输出相结合,理论与实践相结合会达到一个比较好的学习效果。