跳至主要內容

LeetCode编程训练

科哒大约 5 分钟

LeetCode一个编程训练的网站,上面很多题目常见用于在公司招聘时,作为面试题使用,权衡利弊,有点应试教育的味道。

因为自身专业是电子类,除了大学里学的“数据结构和算法”的基础知识,基本上没有做个什么专门训练,所以也是蠢蠢欲动,提起了“刷题”的心思。我做这些题目的仅仅是为了锻炼一下自己的算法和编程能力,顺便在当下的面试中准备一些筹码。

于是,在这一个月的时间,比较集中精力的重新整理和规划了一下按两步骤进行。

  • 数据结构
  • 刷题

数据结构

“工欲善其事必先利其器”,在刷题之前我们应该对常见的数据结构有所了解。

个人非常推荐一个学习网站:Hello 算法open in new window。 网站的介绍也是非常清楚,怎么使用就不展开说了

在学习数据结构的过程,我们可以结合一些图形化工具帮助我们理解,加深印象。

推荐 Data Structure Visualizationopen in new window

在这个过程中,要特别加重对数组、链表、树的理解,不但是对刷题有帮助,对工作里也有帮助。

实际上,

刷题

力扣 (LeetCode) 全球极客挚爱的技术成长平台open in new window

刷题的本质就是算法的实现,而****

具体的题目没有价值,昙花一现的技巧也没有价值,成体系、可稳定复现的解题方法论才有价值

LeetCode常见题型

  • 链表
  • 数组
  • 队列/栈

对我而言,递归以下的这些算法,尤为复杂,需要有很大思考。

  • 递归(深度优先DFS,广度优先BFS)
  • 动态规划(Dynamic Programming)
  • 分治算法(Divide and Conquer)
  • 回溯算法(Back tracing)
  • 贪心算法

我觉得每个程序员都应该花点时间和经历来做一做这些编程题,相信我,你一定会从中受益颇多。

以下是我刷了的一些感悟:

  1. 独立思考

不要一上来就想着要标准答案,有很多事情本事是不存在什么标准答案。在我们长期的求学生涯之中,潜移默化地影响了我们,比如上学的时候,解题的标准答案等,凡是冲着“标准答案”。在你接收一个复杂的需求的时候,是否深入的关注各个环节,预测可能出现的问题,如何预防,出现了该怎么解决,还是一套标准“CRUD”组合拳早早收场,后期被各种线上问题“背刺”。

  1. 构建自己的方法论

在完成某件事情之后,是否及时总结经验。明明有些题差不多相似,解题步骤也差不多一致,就是代码换了个位置,逆向思路。对于这类相似的题,你是否对其归类,总结出自己的一套解题方案。

  1. 及时止损

你的状态是否在线? 如果你的状态不好,身体已经很疲惫了,但是大脑还在转,处于一种浑噩的状态,建议你不要做题了,这种状态下也不要进行其他活动了。在工作中也是一样的,如果状态不太对,请先休息,因为这种状态下,你会发现,写代码越来越来乱,没有条例,思考解决需求的思路上,陷入了死胡同。

结尾

希望大家有时间都去练练LeetCode,无论是找工作还是对你的编程能力会有非常大的提高。