目录

关于算法

算法和语言


算法确实是一件很让人头疼的又让人快乐的事情。虽然工作中用的不多,但面试总会问那么一点点的算法知识,现在大厂面试,哪怕是外包等,都会一定的机考题。

算法在大学里,属于基础课。它本身和语言不是强相关的。但在计算机专业课中,算法和数据结构大多是结合c来讲的;考研专业课也是用的c。我在大学毕业后两年的工作中用c和java刷过算法。现在基本都忘记了,如果说去看那些基本的算法,比如冒泡排序,比较排序算法,以及基本的数学运算,我想,不管是什么语言写出来的,它的样子几乎是差不多的。甚至说,算法也可以用伪代码来描述思路的。甚至不需要语言的支持。伪代码有了,用语言实现起来就简单了!但对于一些字符串处理类的,不同语言写起来就不一样了。不同语言的标准库函数有差异,导致实现起来逻辑会有很大不同。

理解与在脑海中模拟过程

在写算法之前,一定要理解,先有思路再去试着写代码,如果实在不会,只能先看代码,跟着代码理清楚思路。再去照着把代码敲一遍。

算法是复现头脑中的逻辑,你在写一个算法之前,这个算法必然在你的头脑中运行过了,至于编程只是让电脑实现其中的运算。


我用什么语言刷算法

  • 用过java算法,目前在我的博客园上还有博客。当时是为了熟悉这门语言吧,什么都想用java做!也刷了不少题目。

  • 用过c,当时是为了考浙大软院的研究生(后来放弃了),也刷过一段时间。这个是为了考试,没什么好说的。

现在由于上面两门语言都不怎么深入了,就不考虑这些语言了。至于py,我很少用它来刷算法,只是用它来写一下脚本类的,工具类的东西。

为什么选择用go刷题

很多人认为这不是一个明智的选择,用go刷算法的人很少,有些题网上甚至找不到答案;同时,go缺乏一些必要的数据结构。算法虽然和语言不是强相关的,却和数据结构确是强相关。刷题学生一般用c多,工作了以后一般用Java,py多。很少选go的。

而我选择go的原因,是因为用go刷算法,能让我对go更熟悉的同时,也了解了算法知识。何乐而不为?学习代码最忌讳的是学而不用;手一旦生疏了,就不熟悉了。算法的关键在于思路,而不是语言本身,语言只是工具。

目的


现在很多人刷题,可能是为了面试;前几年我找工作的时候,没有机考,但面试也会问我几个简单的算法题。我面的是测试,所以问的比较简单。但是就这么简单的算法题,都可能回答不出来。

要知道,面试,机试,学习,实际工作这几个是不同的东西。面试能力和你平时的工作能力有可能差别挺大的。 有些人技术挺厉害的,但没有刷题,一面二面都过不了,而某些人还真就靠刷题拿下了 Google、微软、脸书等大厂offer。

所以,刷题很重要,当然也很痛苦啊。最重要的是坚持,功夫下在平时,靠突击显然不现实,尤其是算法这个东西。算法看似枯燥乏味,但还是能帮助我们提升编码能力的。 贴一个b站的视频,用golang写的算法,可以学习一下。