上一次,很久以前,我当时还是非常非常抵触算法的,和微博上有个图的思路类似,觉得用不同的排序算法来排序 array 是类似知道茴字有几种写法。
然后迫于找工作,开始大量练习 leetcode,于是发现算法其实对于你熟悉 API 还是非常有用的。仅仅做了几个 easy 题,就让我写代码的时候熟练度大大提高了。
再然后,进一步熟悉算法,开始做 medium 和 hard 题,然后对算法有了进一步深入了解,才发现算法真的是夯实基础,锻炼基本功。
确实,平时都是写业务,基本用不到算法,但是有了算法作为你的备选答案,你的视野、思考问题的角度,以及代码质量,都能够有不小的改善。
我最近有三次用到算法的经历。
我在重构一个项目,本来需要写 2 个函数,分别接收一个对象,或者一组对象,当然你可以用遍历,但我后来用递归来处理数组的情。当然,数组不大,所以性能影响可以忽略,但代码看着精炼多了。
我需要对一组日期和对应的值进行处理,这些值之间有某种关联,如果有连续的日期出现这个值,你还要通过这个连续的值生成一个新值。我第一反应,这不是动态规划么,然后就试了一下,诶,动态规划确实好使!要放在以前,我估计完全不知道从何下手。你可能会问为何要在前端做大量运算?那显然我们后端提供的数据有问题么。他们正在改。
我们要排序一个超大数组,60K 多个对象,希望能够 in-place,这样就不会额外创建新的内存空间, 减少内存消耗。我同事手写了一个 quick sort,虽然没写错,但这不搞笑呢么,为什么要手写,而且手写了好几十行,然后我找到一个标准库 api,告诉他,这是 in-place,并且排序算法又不是互斥的,标准库 api 里肯定混合用了很多种算法,根据数据集来做不同的切换,后来做了 jsbench 对比性能,当然标准库 api 完胜。如果不懂算法,你吵架都不知道从何下嘴。
总之呢,想要成为一个更好的程序员,还是要去熟练掌握各种算法的,越多越好。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.