前两天进行了一个远程工作的应聘,没有想到第一个环节是在线测试算法。对于我这样一个不合格的程序员来说,搬砖7年,只有解决业务的经验,对于算法是软肋啊,尤其是没有经历过ACM比赛和各种刷题的磨练,看到算法题就懵逼呀。
笔试一共四道题,90分钟,最终4道题虽然都给出了最终的答案,但是在测试用例阶段,有三个程序的测试用例不是100%达标的,都是运算速度不符合指标。四道题我基本上都是用最笨的方法干出来的,虽然可以得到结果,但是运行效率必然是低的。
虽然最后面试算是过了,不过这个事情还是着实恶心了我一把。于是我也走上了刷题的道路,每天刷一题就好。
在leetcode上刷的第一个题是easy级别,然而结果还是比较惨,解题的第一思路还是用最笨的方案,最优方案根本是想不到。即使是看了答案,也是要反应了很久很久(几个小时?)才恍然大悟。
我之前对于刷算法题这种事情,一直不是很看好的。因为对于大部分的工作来说,面对的都是业务,很少需要解决性能问题。基本上80%的工作都是在处理各种业务逻辑,20%的性能问题,加配置加机器就搞定了。
所谓算法其实是在运算速度不达标的情况下,不停变换思路过程中寻找最优思路的过程。所以我一直认为算法的根本是具有创新的思考能力,对于刷题而言,只是提高了你脑子里的算法库存而已,未必就提高了你的创新的思考能力。这就是我为啥不去花时间刷题的原因,因为在智商同等的情况下,你只要投入时间就一定有产出的。
这种就有点像当年参加奥数一样,知道自己智商不行,又不想刷题扩大视野,最后也就只有惨败(现在是知道了创新是建立在牛逼的大脑和足够的经验储备上的)。
因为抱有这样的想法,且我这过去的7年是真心没有用到什么算法相关的任何东西(在外包行业遇到性能问题还是挺难的,即时遇到了,调整下业务逻辑就解决了),所以就一直放任着不管了。
不过经历过这次笔试后,我是觉得,作为一种知识储备,花一些时间在刷题上还是有必要的。希望写出来这些,对于刚20出头的、抱有跟我之前一样想法的人,能够有所感悟。
不多说了,让我再去看看红黑树是怎么回事。