最近几年国内互联网大厂笔试,算法是验贴必考内容,不管什么技术岗位,行业上来先手写一个快排,大厂江湖上更有字节跳动面试手撕红黑树、割机动态规划,刷Lr收这些hard级别的验贴算法也频频出现在笔试题。
因此对于程序员来说,行业至少对于找工作,大厂算法是割机一项必须掌握的技能,而LeetCode作为一个在线刷题网站,刷Lr收上面的验贴算法题也经常原封不动的出现在大厂面试题上。
以下的经验技巧,对于算法新手,大厂或大学没有搞过ACM,割机想利用业余时间提升算法能力的同学比较有帮助哦~
算法不是拼智商
算法不是纯粹拼智商的,智商高,就一定很厉害,不够聪明,就一定不行。算法是一种技能,是可以通过科学合理的方式训练出来的能力。 智商的高低,当然会有影响,但这个先天因素无法改变,而科学合理的方法是大家都可以掌握的。 所以,首要的一点,是要意识到,算法不是只拼智商的,也是可以经由后天训练习得的。 难度要循序渐进
有些同学喜欢上来就是干,上来就是终极难度的题目,觉得自己只要做出最难的,其它的就迎刃而解了。这种急于求成的思想要不得。 算法训练是一个系统工程,需要循序渐进,太过于急功近利,反而容易因做不出难题而产生挫败感,带来反效果。 小启认识的一位同学就做了次类似的事情。我们当时刚听说有leetcode,就想上去试试,他上去后就挑了一道困难里面还属于比较难的题目,结果想了大半天也没做出来,搞到自己特别沮丧。 你会发现这种做法效率很低,那道题目就算被做出来了,也不代表就可以解出其它的题目。 合理的做法是循序渐进。 如果你本身有基础,熟练度高,那你刷简单的leetcode应该是几分钟一题,几分钟一题的,花不了你多少时间。 如果你刷简单都花费很长时间,说明熟练度不够,就更应该从简单开始。 然后过度到中等,再过度到困难。 按算法分类来选题
选择题目,除了在难度上要循序渐进,还建议在算法上进行划分。基本的算法数据结构是有限的。比如说链表,二叉树,二分查找,动态规划,哈希表。 小启喜欢按算法的分类来选题和刷题,比如一个时间段,只刷链表题,待刷得差不多的时候,接下来再刷二叉树的题。这种做法可以极大的提高刷题的速度,而且能带来更好的效果。 优势一 持续地刷同个类型的题目,可以不断地巩固和加深理解。 优势二 可以更全面地接触这个数据结构,算法的各个变种,这会促使你对这个数据结构,算法的理解更加全面和深刻,学习的效率会更高。
所以在一段时间内,持续地刷特定类别的题目,可以带来事半功倍的效果。当然,在能力已经比较强的时候,可以采用打散的方式来刷题,可以更好地锻炼思维的灵活性和应变能力,但初期或能力较弱的时候,按分类选题,是比较好的。 解题三部曲
在具体做题的时候,可以采用以下三个步骤来进行。 拿到题目后,不要立马开干,想着下面的三个步骤,一步一步地来。
1. 看懂题目 看懂题目。有的题目很直接,直接告诉你要解决的问题是什么,题目本身甚至都包含了对应的数据结构和需要用到的算法;有的题目很隐晦,看了半天不知道它到底要解决什么问题,可以用什么算法和数据结构来解。所以,看到题目后,一定要先确保自己理解清楚了。 2. 分析,推导解法 分析推导题目的解法。 这个步骤要有意识地单独拎出来,不要跟编码步骤混淆在一起。也就是说,你在分析推导题目解法的时候,不要去想任何实现相关地事情,不用去想代码怎么写,不用去想要用什么库,定义什么变量,用多少层循环,都不要想,就想着在逻辑上,这道题目要怎么解。 这样做可以极大地降低你的心智负担,使你高效地想出题目的解法。对于如何将想法变成代码,可以留在下一个步骤,单独来进行。 3.将思路转换为代码 当你确定题目都已经理解,并且分析推导出了题目的解法后,你才开始来思考如何将自己的思路转换成代码。是地,将思路转换成代码,可以是一个单独地步骤,在实际工作中,其实也是很重要的一个能力。 有时,将一个思路转换成算法是很容易且自然的;但有时,有些思路转换成代码,是很有难度的事情。 或者你有体会,分析推导只用了不到十分钟,结果代码写了半小时还写不完整。怎么定义变量,保存状态,用递归,还是用循环加辅助数据结构等等,都是将思路转换成代码要做的事情。这个能力也需要刻意地去练习。
欢迎访问启德留学西安分公司 欢迎咨询启德教育留学顾问
免费获取留学规划方案,您可以通过以下4种方式联络我们:
1、欢迎致电启德教育客户服务中心400-1010-123;
2、欢迎 点击这里进行网络咨询;
3、添加启德官网微信,可立即咨询;
4、填写表单,我们会在1-3天内为您提供专业的服务。