LeetCode 刷题的只是写好程序的第一哩路

什麽是 LeetCode?

「什麽是 LeetCode?」是整个铁人赛系列文章的第一个主题,你现在会怎麽会回答这个问题呢?

▶ LeetCode 是一个线上解题系统
▶ LeetCode 是一个持续锻链资料结构和演算法的平台
▶ LeetCode 是一个软件公司技术面试题的线上题库

这些答案都没错,LeetCode 不仅仅是一个线上解题系统,他能够满足你不同阶段的程序进修。不管你是「时间有限的密集冲刺」、「搭配理论课程练习」还是「想长期持续锻链程序基础功」,LeetCode 平台都能够提供你适合的练习与使用策略。写程序不只是学习程序语法,更需要搭配实作练习,而 LeetCode 就像程序世界的单字本,随时都可以拿起来练习或是玩一下。

接下来,就大家一起回顾我们这三十天讲了哪些东西吧 ヾ(´∀`)ノ

① 刷题前的正确姿势

在开始正式进入刷题的练习之前,会建议你从「为什麽要刷题?」这个问题开始出发。我认为不管做什麽事情,「动机」都是驱动一件事情是否成就的重要来源。就像没有报名铁人赛,怎麽会连续写出三十篇的技术文呢?所以在这一个阶段大概聊了几个议题:

  • 什麽时间点该考虑 LeetCode 刷题?
  • 几种常见的解题策略与刷题顺序
  • 刷题过程的心态与技巧
  • 看懂题目背後的设计思维
  • 如何衡量程序的好与坏?

为什麽要刷题? 最核心的目的是能够让你自然的写出「更好的」的程序码,所以心中必然有一个追逐更好的渴望,不论你的动机为何。而我们会把刷每一个题目的过程分成四个阶段,「动手之前先思考 → 初探直觉解 → 刻意优化 → 举一反三」。

这个其中最关键的核心在於 持续优化 的思考过程,写程序是的世界中「没有最好,只有更好」,唯有把持续优化这个想法放在心里面,永远提醒自己不要甘於写出一个「会动的程序」就好,要追求的是
如何写出「漂亮的程序」。

② 各种资料结构与演算法的解题脉络

从「如何理解题目背後的设计思维」到「看懂题目背後的设计思维」,其实就是一种写出更好的程序码品质的过程。所谓好的程序背後所代表的即是「资料结构」与「演算法」的使用,掌握好资料结构与演算法让你的程序写得更漂亮。在这整段过的过程中,我们一起从理解完题目到开始实作,每一个题目一起尝试「#初探直觉解」并且一起体验「#刻意优化」的过程。「如何最大化一个题目的效益」也是刷题过程中重要的关键,如何从一个尽可能地持续迭代、持续优化并且思考沈淀。

从「资料结构」的技巧切入:

  • 从内建容器到善用资料结构特性
  • 线性与非线性的资料结构
  • 从「递回」策略迁移到「堆叠」暂存
  • 资料存取的先後顺序:Stack 和 Queue

从「演算法」的策略切入:

  • 递回函式与回溯法优化
  • 各式各样的演算法 - Greedy、Dynamic Programming 与 Divide and Conquer
  • 刷题後的归纳与淬链 - 常见的解题技巧「模板」

不过我们这一段的过程,我们其实是先从「题目」出发再归纳整理出技巧。主要的原因是,我们都会先从「穷举法/暴力法」这种相关直观但没那麽漂亮的方法开始解,再从中思考可以优化的空间,进一步从优化的空间带入资料结构与演算法的是什麽。

③ 除了刷题之外的事

「程序设计」的练习是一种从「写得出」程序到「写得好」持续迭代的优化过程,刷题是练习 解决问题的能力 的一种方法,而这里的「问题」主要是指 演算法问题 。但在实务的工作场景当中,「演算法问题」只是程序工作的一小部分而已。我们除了在意「一个问题中的算法怎麽解之外」,我们更在意的「如何把这些算法实现成完整的应用」。因此除了刷题之外的事是如何用「工程化」的方式解决一个真实问题,最後三天一起聊聊除了刷题之外想写好程序还有以下几个技能需要掌握:

  • 软件工程 (Software Engineering)
  • 专案管理(Project Management)
  • 系统架构(System Architecture)

总结来说,虽然我们是以 LeetCode 刷题为主的技术分享。不过 LeetCode 刷题的只是写好程序的第一哩路,比起你刷个多少题、学会了多少技巧,更重要的是希望你能够把个「持续优化」的信念放在心上。追逐程序实作技巧也许短期内会觉得很刻意,但立志写出一个精简高效的程序才是身为一个工程师该有的浪漫。


嗨,大家好!我是维元,一名擅长网站开发与资料科学的双栖工程师,斜杠於程序社群【JSDC】核心成员及【资料科学家的工作日常】粉专经营。目前在 ALPHACamp 担任资料工程师,同时也在中华电信、工研院与多所学校等单位持续开课。拥有多次大型技术会议讲者与竞赛获奖经验,持续在不同的平台发表对 #资料科学、 #网页开发 或 #软件职涯 相关的分享,邀请你加入 订阅 接收最新资讯。


<<:  大共享时代系列_029_共享读书趣

>>:  【day30】chatRoom修改画面 X 动态修正layout

环境配置(node/golang)(Day3)

接续上篇提到的内容,这篇提到的主要会是golang与react会需要的环境配置 小提醒 在下面会有提...

Day 28:Ansible Vault

昨天写完 playbook 之後,有其中一个问题是需要手动输入 root 的密码,但若是所有机敏资料...

【PHP 设计模式大头菜】策略模式 Strategy Pattern

策略模式 Strategy Pattern 策略模式,可以让物件在运作时更改其行为或算法,你可以透...

SSRS Pass a Report Parameter Within a URL

欲找,RS可以指定汇出的档案名称否,结果看到这个. URL access parameter ref...

前端工程学习日记第15天

#网页排版技巧 Part II使用 ul li 设计产品列表 我的作业pencode ...