题目有点标题党了,还请大家见谅。下面切入正题。

算法很重要,但算法也是学起来最难,最令人生畏的。

这篇就来说说算法刷题方面的一些经验和技巧。

大家在刷题的时候不知道有没有遇到以下情况。

拿到题目后就开始想着怎么写代码,结果写了大半天,发现越写越乱,最后就写不下去了,又或者是,看到题目后,一脸懵逼,完全不知道怎么下手。

其实,学算法,刷题蛮干是不行的,需要遵循科学的方法。

以下的经验技巧,对于算法新手,或大学没有搞过ACM,想利用业余时间提升算法能力的同学比较有帮助,对于算法高手和ACM大牛,可能不太适用,仅供参考。

算法不是拼智商

算法不是纯粹拼智商的,智商高,就一定很厉害,不够聪明,就一定不行。算法是一种技能,是可以通过科学合理的方式训练出来的能力。

智商的高低,当然会有影响,但这个先天因素无法改变,而科学合理的方法是大家都可以掌握的。

所以,首要的一点,是要意识到,算法不是只拼智商的,也是可以经由后天训练习得的。

难度要循序渐进

有些同学喜欢上来就是干,上来就是终极难度的题目,觉得自己只要做出最难的,其它的就迎刃而解了。这种急于求成的思想要不得。

算法训练是一个系统工程,需要循序渐进,太过于急功近利,反而容易因做不出难题而产生挫败感,带来反效果。

记得我有一个同事就做了次类似的事情。我们当时刚听说有leetcode,就想上去试试,他上去后就挑了一道困难里面还属于比较难的题目,结果想了大半天也没做出来,搞到自己特别沮丧。

你会发现这种做法效率很低,那道题目就算被做出来了,也不代表就可以解出其它的题目。

合理的做法是循序渐进。

如果你本身有基础,熟练度高,那你刷简单的leetcode应该是几分钟一题,几分钟一题的,花不了你多少时间。

如果你刷简单都花费很长时间,说明熟练度不够,就更应该从简单开始。

然后过度到中等,再过度到困难。

这里有个经验之谈。

目前国内大厂的算法考察,基本不会超过leetcode 中等难度,上限难度基本都是leetcode 中等题里面的中等难度(有点拗口,leetcode 中等难度里面也有分档次)。

如果你能够再20分钟内,做出这种难度的题目,国内大厂的算法面试,基本可以畅通无阻。

按算法分类来选题

选择题目,除了在难度上要循序渐进,还建议在算法上进行划分。

基本的算法数据结构是有限的。比如说链表,二叉树,二分查找,动态规划,哈希表。。。

我喜欢按算法的分类来选题和刷题,比如一个时间段,只刷链表题,待刷得差不多的时候,接下来再刷二叉树的题。。。

这种做法可以极大的提高刷题的速度,而且能带来更好的效果。

一,持续地刷同个类型的题目,可以不断地巩固和加深理解。

二,可以更全面地接触这个数据结构,算法的各个变种,这会促使你对这个数据结构,算法的理解更加全面和深刻,学习的效率会更高。

所以在一段时间内,持续地刷特定类别的题目,可以带来事半功倍的效果。

当然,在能力已经比较强的时候,可以采用打散的方式来刷题,可以更好地锻炼思维的灵活性和应变能力,但初期或能力较弱的时候,按分类选题,是比较好的。

解题三部曲

在具体做题的时候,可以采用以下三个步骤来进行。

拿到题目后,不要立马开干,想着下面的三个步骤,一步一步地来。

1. 看懂题目

看懂题目。有的题目很直接,直接告诉你要解决的问题是什么,题目本身甚至都包含了对应的数据结构和需要用到的算法;有的题目很隐晦,看了半天不知道它到底要解决什么问题,可以用什么算法和数据结构来解。所以,看到题目后,一定要先确保自己理解清楚了。

我的一个经验是,拿到一个题目后,看5分钟,如果5分钟之内看不懂,我就mark 下来,留到后面再做,要不很影响刷题的心情。

不过就leetcode 来说,这样的题目不多。基本都能在再5分钟内看懂。

2.分析,推导解法

分析推导题目的解法。

这个步骤要有意识地单独拎出来,不要跟编码步骤混淆在一起。也就是说,你在分析推导题目解法的时候,不要去想任何实现相关地事情,不用去想代码怎么写,不用去想要用什么库,定义什么变量,用多少层循环,都不要想,就想着在逻辑上,这道题目要怎么解。

这样做可以极大地降低你的心智负担,使你高效地想出题目的解法。对于如何将想法变成代码,可以留在下一个步骤,单独来进行。

3.将思路转换为代码

当你确定题目都已经理解,并且分析推导出了题目的解法后,你才开始来思考如何将自己的思路转换成代码。是地,将思路转换成代码,可以是一个单独地步骤,在实际工作中,其实也是很重要的一个能力。

有时,将一个思路转换成算法是很容易且自然的;但有时,有些思路转换成代码,是很有难度的事情。

或者你有体会,分析推导只用了不到十分钟,结果代码写了半小时还写不完整。

怎么定义变量,保存状态,用递归,还是用循环加辅助数据结构等等,都是将思路转换成代码要做的事情。

这个能力也需要刻意地去练习。

算法的封装

接下来,说点更细节的东西,算法的封装。

软件设计里面,最关键的思想就是抽象和封装了。

其实解题也可以用到这种思路。

比如一道题目的正确解法是先排序,再进行二分查找,那你的脑子里面只要记得,快速排序和二分查找,就可以了,不需要去想,快速排序和二分查找的具体实现。

就像我们在写代码的时候,遇到排序,查找,我们一般都直接使用了现成的函数库,而不需要自己动手再写一遍。这个是代码层面封装带来的好处,思维层面的封装也是一样的道理。

这种封装思想在做题的时候可以极大地减轻我们的心智负担,使得自己的脑力可以发挥在问题的核心点上。

用封装的思维去解题,你的解题能力会有快速地提升。

封装的思想可以用于 “2.分析,推导解法” 的过程,在 “3.将思路转换为代码” 的过程,更是可以用语言内置的算法函数,数据结构来直接实现,也使得从思路转换到代码的过程更加的直观和自然。

在实际的面试或比赛中,除非有特殊说明,一般都可以放心地使用语言的内置算法和数据结构。

然后你可能会问,对于像排序,查找这些基础的算法应该怎么对待呢?我的建议是可以把它们当作重要算法来刻意练习。

快排,快搜,堆排序等,我们可以称它们为元算法。

对于这些算法的刻意练习。一开始的时候,要看算法书的描述,确保自己理解了算法的思路,然后尝试自己实现一遍。

实在写不出来,就参照或者直接抄。一个算法花几天的时间,大部分人都是可以理解并自己实现出来的。(排除一些特别难的,需要更长的时间)。

保持持续的动力

算法能力的提升,是一个长期的事情,需要持续地学习和做题,而刷题又是个比较枯燥的过程,在遇到难题的时候,很容易产生挫败感,甚至导致直接放弃。

所以这里需要特别关注刷题时的正反馈。如果你老是无法解出某个难度或某个类别的题目的时候,你就要考虑降低难度,或者安排额外的时间,去更全面的复习特定的算法和数据结构了。

注意不要死磕!算法学习,特别讲求方法和技巧,死磕非但磕不过去,还可能留下对算法的心里阴影,导致学习障碍。

总结

首先算法不是只拼智商的,是可以通过后天的刻意练习掌握的一种能力。

刚上手的时候,难度上需要循序渐进,最好能够按算法分类来刷题。

解题的时候,建议按这三个步骤来 

1,看懂题目

2,分析,推导解法 

3,将思路转换为代码。

在更细节方面,封装的思想也可使用在算法上面,可以极大地降低我们的心智负担,提升解题的效率。

最后是要注意做题过程中的正反馈,确保自己能持续地做下去。

希望这里分享的经验技巧,能给大家带来帮助!

不懂算法,还想进大厂?做梦吧相关推荐

  1. 不懂算法,还想进大厂?做梦吧(转载自微信公众号 -- 大飞码字)

    原创: 大飞码字 大飞码字 题目有点标题党了,还请大家见谅.下面切入正题. 算法很重要,但算法也是学起来最难,最令人生畏的. 这篇就来说说算法刷题方面的一些经验和技巧. 大家在刷题的时候不知道有没有遇 ...

  2. 面试 | 阿里P7级别程序猿亲身告知,不会面试,还想进大厂?做梦吧

    Hi!我是小小,今天是本周的第四篇,在这篇中,将会着重的讲解关于面试的一些内容. 一般来说,将会考察一些以下需要的技术点:看看聪明的你能答出几道来. Java基础知识面试题 Java概述 何为编程? ...

  3. 今天面了一个大学生:这82道SpringBoot面试题都答不上来?还想进大厂?

    Spring Boot面试题 1.什么是Spring Boot? 多年来,随着新功能的增加,spring变得越来越复杂.只需访问页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同 ...

  4. 【Java进阶营】今天面了一个大学生:这82道SpringBoot面试题都答不上来?还想进大厂?

    Spring Boot面试题 1.什么是Spring Boot? 多年来,随着新功能的增加,spring变得越来越复杂.只需访问页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同 ...

  5. 《我想进大厂》之mysql夺命连环13问

    想进大厂,mysql不会那可不行,来接受mysql面试挑战吧,看看你能坚持到哪里? 1. 能说下myisam 和 innodb的区别吗? myisam引擎是5.1版本之前的默认引擎,支持全文检索.压缩 ...

  6. 听说你想进大厂?当心这13个MySQL送命题!

    想进大厂,mysql不会那可不行,来接受mysql面试挑战吧,看看你能坚持到哪里? 1. 能说下myisam 和 innodb的区别吗? myisam引擎是5.1版本之前的默认引擎,支持全文检索.压缩 ...

  7. 奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些并发编程知识是你必须要掌握的!完整学习路线!!(建议收藏)

    大家好,我是冰河~~ 今天给大家带来一篇完整的并发编程学习路线,这应该是全网最全的并发编程学习路线了吧,希望能够为各位小伙伴们带来实质性的帮助. 如果这篇文章对大家有点帮助,小伙伴们点赞,收藏,评论, ...

  8. 为什么人人都想进大厂?都是被逼的!

    创业公司人员紧张,一个人当五个人用······公司发展路线模糊,今天做这个业务,明天突然大掉头换了一个赛道·······进公司前说的天花乱坠,进来后才发现这也没有那也没有,人事调动全在老板的喜好··· ...

  9. mysql delete 会锁表吗_我想进大厂之 MYSQL 夺命连环13问

    来源 | 科技缪缪 想进大厂,mysql不会那可不行,来接受mysql面试挑战吧,看看你能坚持到哪里? 能说下 myisam 和 innodb 的区别吗? myisam引擎是5.1版本之前的默认引擎, ...

最新文章

  1. 怎样对拍、如何对拍、对拍模板
  2. [Spring5]IOC容器_Bean管理注解方式_组件扫描配置细节
  3. linux符号命令,Linux_几个符号命令(示例代码)
  4. logisim实验——通过2个半加器实现1-bit全加器,通过4个一位全加器构成4-bit加法器(详解)
  5. (2021) 24 [持久化] 文件系统API
  6. 在vscode运行js 输出会合并_前端系列——JS的运行与输出
  7. 【新鲜出炉】快手推荐算法 bing搜索 面经
  8. 测试面经|从测试螺丝钉到大厂测试开发,三点成长心得和面试经验
  9. linux vim 终端 行首 行尾_不会vi/vim,看这一篇足矣
  10. C# 创建、部署和调用WebService的简单示例
  11. 线程的发展史,调度策略、适用范围、特点,进程与线程的区别、线程的属性、posix线程库
  12. team viewer 远程控制计算机,使用TeamViewer让手机控制电脑的设置步骤
  13. 前端tif文件在线预览
  14. WORD出现VBE6EXT.OLD不能被加载的问题
  15. MMORPG网络游戏开发之网络通信
  16. 集成电路将成一级学科,这些高校迎来重大机遇!
  17. 计算机毕业设计ssm青岛恒星科技学院机房管理系统0k0u9系统+程序+源码+lw+远程部署
  18. redhat 复制文件夹及子文件夹_linux如何复制文件夹和移动文件夹
  19. 计算机专业的学生注意IT 培训的7 大陷阱
  20. Java压缩字符串的方法收集

热门文章

  1. 全能系统监控工具dstat
  2. MariaDB Spider:实现MySQL横纵向扩展的小能手
  3. Linux Ubuntu常用命令
  4. Solaris RAID 换盘/替换坏盘
  5. IBM MQ 使用一例
  6. C#文件路径操作总结
  7. 【机器学习】最近邻算法KNN原理、流程框图、代码实现及优缺点
  8. 自信息/熵/联合熵/条件熵/相对熵/交叉熵/互信息及其相互之间的关系
  9. docker服务器、以及容器设置自动启动
  10. Linux的mmap内存映射机制解析