关于练习 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 完胜。如果不懂算法,你吵架都不知道从何下嘴。

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

5371 次点击
所在节点    程序员
33 条回复
daozhihun
2020-06-09 13:20:26 +08:00
刷 lc 肯定是有用的,虽然直接能用到的很少,但还是能培养自己的思维能力和严谨性,在思考别的问题的时候思路会开阔很多
不过我不赞成过度地刷 lc (尤其是某些公司面试喜欢出一些很偏门的问题),那样在考察候选人的时候反而本末倒置了,除非是专门招搞算法的
yaphets666
2020-06-09 13:32:17 +08:00
我是有一次 我前端做一个表格树 后端提供一个树形数据 但是没有 "合计" 这个时候我就没有头绪 开始明白刷题和学习算法的意义了
miaomiaoweiwei
2020-06-09 14:03:50 +08:00
是的 非常赞同你的说法 可以开拓思路
Dogergo
2020-06-09 14:38:20 +08:00
@dswyzx 会,实际上刷抖音,如果你看评论的话,我想不超过 10 分钟,你会认为自己脑子没了,是他们不正常还是自己不正常
gadsavesme
2020-06-09 14:41:06 +08:00
对于一些从不判断边界值空指针的,还有一些简单的循环树形结构啥的都搞不清楚的,我反正一律都建议可以多刷刷 lc
Coolha
2020-06-09 15:01:59 +08:00
@Dogergo 哈哈哈哈哈哈,微博也是这样
LYEHIZRF
2020-06-09 15:08:04 +08:00
当然 学过算法以后 实现代码首先会考虑复杂度
liuxingdeyu
2020-06-09 16:07:54 +08:00
还有就是,边缘情况考虑的更多了
lxd152
2020-06-09 19:55:51 +08:00
算法能把你带到不同的高度
leven87
2020-06-09 20:10:19 +08:00
术业有专攻,基础肯定要有,但多深入看个人。我是看个算法半年肯定忘记的
lithbitren
2020-06-09 20:12:35 +08:00
竟然能碰到 dp 的场景
skys215
2020-06-10 10:12:52 +08:00
@ericgui 这篇不是(续)吗,我想看前篇,在求链接
volvo007
2020-06-12 13:07:46 +08:00
最近遇到的问题是最短路径和马尔可夫链,搁以前肯定懵了,估计连用什么模型去解决都不知道。刷完题之后轻松解决,还是很有帮助的

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

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

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

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

© 2021 V2EX