关于练习 leetcode 和算法是否对日常工作有用的问题(续)

2020-06-09 08:54:36 +08:00
 ericgui

上一次,很久以前,我当时还是非常非常抵触算法的,和微博上有个图的思路类似,觉得用不同的排序算法来排序 array 是类似知道茴字有几种写法。

然后迫于找工作,开始大量练习 leetcode,于是发现算法其实对于你熟悉 API 还是非常有用的。仅仅做了几个 easy 题,就让我写代码的时候熟练度大大提高了。

再然后,进一步熟悉算法,开始做 medium 和 hard 题,然后对算法有了进一步深入了解,才发现算法真的是夯实基础,锻炼基本功。

确实,平时都是写业务,基本用不到算法,但是有了算法作为你的备选答案,你的视野、思考问题的角度,以及代码质量,都能够有不小的改善。

我最近有三次用到算法的经历。

  1. 我在重构一个项目,本来需要写 2 个函数,分别接收一个对象,或者一组对象,当然你可以用遍历,但我后来用递归来处理数组的情。当然,数组不大,所以性能影响可以忽略,但代码看着精炼多了。

  2. 我需要对一组日期和对应的值进行处理,这些值之间有某种关联,如果有连续的日期出现这个值,你还要通过这个连续的值生成一个新值。我第一反应,这不是动态规划么,然后就试了一下,诶,动态规划确实好使!要放在以前,我估计完全不知道从何下手。你可能会问为何要在前端做大量运算?那显然我们后端提供的数据有问题么。他们正在改。

  3. 我们要排序一个超大数组,60K 多个对象,希望能够 in-place,这样就不会额外创建新的内存空间, 减少内存消耗。我同事手写了一个 quick sort,虽然没写错,但这不搞笑呢么,为什么要手写,而且手写了好几十行,然后我找到一个标准库 api,告诉他,这是 in-place,并且排序算法又不是互斥的,标准库 api 里肯定混合用了很多种算法,根据数据集来做不同的切换,后来做了 jsbench 对比性能,当然标准库 api 完胜。如果不懂算法,你吵架都不知道从何下嘴。

总之呢,想要成为一个更好的程序员,还是要去熟练掌握各种算法的,越多越好。

5398 次点击
所在节点    程序员
33 条回复
rodjerL
2020-06-09 08:57:23 +08:00
是的,而且时候看框架的源码也会用到某些数据结构和算法,如果不了解回比较吃力
senup
2020-06-09 09:14:38 +08:00
干这行崇尚的理念不就是技术至上,所以说,多学点总是好的
zppass
2020-06-09 10:08:06 +08:00
最起码会点算法,数据结构理解好一点找工作真的有帮助。
Torpedo
2020-06-09 10:23:32 +08:00
我觉得吧,遇到一个算法问题,你要能知道用哪个算法解最好。
至于这个算法的实现,无论怎么做,保证正确即可。
相比这个,更重要的还是代码架构、设计这方面
pandachow
2020-06-09 10:30:12 +08:00
事实上很多 LeetCode 题就是工作中场景的抽象还原。
Jooooooooo
2020-06-09 10:47:27 +08:00
肯定比刷抖音强

你再想想
NCZkevin
2020-06-09 11:00:11 +08:00
编辑距离,kmp,排序在实际开发中用过好几次,多刷点算法绝对是有帮助的
Ariver
2020-06-09 11:00:47 +08:00
+1
Perry
2020-06-09 11:01:30 +08:00
确实是这样的
dswyzx
2020-06-09 11:22:35 +08:00
@Jooooooooo 没刷过抖音
但刷抖音会让你几个小时没有头绪怀疑人生怀疑智商吗
Donne
2020-06-09 11:34:01 +08:00
学习算法之后,写代码不自觉地就会考虑到性能的问题,这是之前考虑不到的地方。
Mark24
2020-06-09 11:47:02 +08:00
确实是这样
maplelin
2020-06-09 11:52:16 +08:00
刷 leetcode 确实对于判断边界条件,提高代码质量很有帮助,写的 bug 都比之前少了不少
skys215
2020-06-09 12:13:37 +08:00
第一篇的链接有吗
ruyu
2020-06-09 12:31:27 +08:00
脑子太久不用就会生锈
Jooooooooo
2020-06-09 12:38:52 +08:00
@dswyzx 我的意思是. 空余时间固定, 拿来干嘛都行.

拿来刷题, 比大部分事都强.
kera0a
2020-06-09 12:39:26 +08:00
非常非常赞同!
Perry
2020-06-09 12:43:42 +08:00
不过其实这些算法本科内容都学过,只是刷题能更好地巩固之前学的。
NtosKiking
2020-06-09 12:48:32 +08:00
之前做过一段时间的 LeetCode 题目,工作中为展示体现父子层级关系功能的时候用到了刷题学到的利用栈进行深度优先遍历的思路。不得不说,多做题学习思考后解决问题的思路会更多。
ericgui
2020-06-09 12:48:34 +08:00
@skys215 第一个的仅仅是问了一下,刷算法是否对日常工作用实际的帮助,以及日常是否用到算法

一个非常简单的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/679860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX