【JS每日一算法】100题🎉我想说的一些话

463 阅读3分钟

不知不觉《JS每日一算法》这个专栏更新到一百题了,看着订阅该专栏的同学们从一开始的寥寥几人到现在一千多真的很开心!在这个过程中我真的学习和收获到了很多东西,无论是知识还是心态方面,为此特意写下这篇文章分享下。

为什么要学习算法?

当把O(2^n)优化到 O(n)真的很有成就感,每次学习一个新的算法都能感受到数学的美。

为什么会想着写文章?

我觉得想要验证自己是否掌握了某个知识的最好办法就是能否将他讲解分享出来。

本专栏的一些规划

在开始写这个专栏的时候就只是想着记录下自己学习算法过程,并且验证自己是否掌握了该算法,但后来自己逐渐有了一个清晰的目的:就是把自己学习算法的心路历程总结起来,并根据此把《JS每日一算法》建设为能够逐步提升前端工程师算法力能的专栏,为此我做了如下计划:

  • 基础阶段】leetcode中1~150题:我认为学习算法的途径并不是啃书,无论你如何啃队列、动态规划、循环链表你始终都是懵懂的,不知道为什么这样做,不知道它有什么用,但是如果你是遇到了相应问题,再去学习并了解该算法,你就会理解为什么这么做,这样学习往往会事半功倍。在leetcode的1~150题中其实已经涵盖了很大部分常见算法(除了图),并且这些算法都有需要解决的实际问题,学习起来也比较容易,因此这部分内容作为入门。
  • 面试准备】leetcode中剑指offer系列50题:很多同学学习算法的一部分目的就是面试,那剑指offer系列肯定是必须了解与学习。
  • 进阶阶段】这部分内容我将着重学习前端开发工作中常见的算法,比如:防抖、节流、贝塞尔等等。由于作者是硬件专业出身,而软件中的一些算法其实是需要从硬件层面解释的(防抖、节流与一些常见的滤波算法就是个很好的例子),并且一些软件中的常见算法其实都是先在硬件中应用的,因此从硬件方面解释往往能够更加容易理解算法的本质。

本专栏前面1-200篇算法题相关的文章我依旧会保持一天一题的学习速度,而200题之后可能会一周一更。

学习算法的一些建议

在解题过程中,务必先认真思考是否能够找到解决办法。如果实在没有头绪,可以去查看他人的代码。在阅读他人代码时,不要着急,不要让恐惧感驱使你草率地结束。阅读代码时,尝试用一个具体的例子代入,一步一步跟着代码的执行走一遍,这将有助于更好地理解算法的运作。

我在学习算法时经常会感受到自己的无知,总会责备自己为什么如此笨。但想要学习好算法一定要摆正心态,当我们从责备变成承认自己的不足时,我想我们应该走在了正确的学习道路上。心态调整是学习过程中的关键,有些人在困难中前行,有些人却在怀疑中止步。

感谢大家对《JS每日一算法》的支持与关注。我希望我的经验能够帮助你在学习算法的道路上更进一步。让我们共同努力,不断进步!