程序员笔试面试最爱考察的算法,到底怎么搞定?

比如数据结构里的数组,看似非常简单的数据结构,却可以支持很多复杂的算法,比如动态规划,比如DFS和BFS,再比如字符串算法、二叉树算法等等。那么算法到底是什么东西呢,不妨让我们来看看官方的介绍。

其实,算法的本质就是给你一组输入,运算之后给你一组输出,因此,算法帮人们解决很多问题把抽象的问题具体化,把一个问题转化成另外一个问题。

认识算法的N个阶段

我第一次遇到算法题,还是在我考研复习数据结构的时候,那个时候我看到的算法题其实都是很基础的题目,比如把数组中的两个元素置换,把两个链表合并成一个,但对于我来说已经是很有难度的事情了,那时候我连伪代码是什么都还不懂。

第三次认识算法,是在面试了头条这类对算法要求极高的公司之后。当时我对这类公司的算法面试难度还没有足够的认识,几乎没有准备什么算法题就去参加面试了,头条不像其他公司,绝不是问一些类似快排这样的简单算法题敷衍了事,而是会直接掏出一道BFS或者DFS让你做一做,而且经常不止是一道题。我只记得当时面试的时候,看了题目半个小时啥都没写出来,非常尴尬。

第四次认识算法,是在参加了一些公司的笔试之后。和笔试算法题相比,面试算法题简直是小巫见大巫,好歹面试题考察的还是一些经典的算法,可能刷一刷剑指offer和LeetCode的简单或者中等题就能搞定了,但是笔试题就不一定的,出题人的思路千奇百怪,很多时候解法也很古怪。整体来看,通常笔试算法题的难度是最高的,特别是像字节跳动这种对算法有变态要求的公司,基本上算法题一道都写不上来。

算法学习之路

虽然我学习算法的道路一直不太顺利,但是想要进BAT大厂,算法不过关肯定是不行的。因此,我对于上面每个阶段的问题,都制定了一些对应的学习方案,让我应对每个阶段的算法问题。

数据结构与算法

直接上剑指offer

有了数据结构的基础打底之后,至少你在看算法题的答案时,也能大概看懂了。但是,数据结构里的那些算法,很多时候是不够用的。当你了解到《剑指offer》里这本书的算法是笔试面试经常要考的内容,再去看看这本书里题目的难度,你就会发现事情并不简单。

对于只有一点数据结构算法知识的同学来说,直接上剑指offer是有难度的,毕竟很多题目的解法你之前见都没见过,有的题目你看了答案也会很快忘记。

其实,这本书里大部分的题目都不会用到什么特别复杂的算法,但是很多题型你可能确实是第一次见过,刷题这件事情没有捷径。这个时候你能做的就是多做题做看几遍书,真正做到能把题目自己写一遍,才能算是掌握了这本书里的算法。

笔试题级别的算法怎么学

既然已经看完了剑指offer,是不是可以直接开始学习笔试题级别的算法了。且慢,我给你看一样宝贝。其实,剑指offer的那些算法,大部分都还是在数据结构算法的范畴之内,而在如今的笔试面试题库里,还有很多的经典算法,这些算法题就要到LeetCode里才能施展拳脚了。

比如动态规划,深度优先、广度优先、回溯算法等等,这类算法题光靠自己想是想不出来的,因为这些题目的背后都是一些经典的算法和解题思路,你之前没见过的话,想破头也不可能想的出来。

搞定LeetCode和真题

最后一步,可能也是最关键的一步,就是要进入算法题库的最高殿堂,LeetCode了,这个刷题网站想必很多同学都听说过,特别是有志于进入互联网大公司的同学,这个是必知必会的。

再说说历年的笔试真题吧,如今很多互联网公司的笔试面试都在牛客网上进行,因此这些题目一般也都会收入到牛客网的真题题库中,这个时候,我们就应该多去刷一刷这类题目,特鄙视你感兴趣公司的历年真题,最好都刷一遍,毕竟很多时候出题人也会偷懒去拿以前题目做修改,甚至直接照搬原题。

而且,这些互联网公司的算法真题一般都出的很特别,多做一些,你才能掌握这类题目的规律,正如数学题一样,必须要多做多练,才能够在实战时也保持镇定。

推荐资源

书籍

《算法图解》《啊哈算法》《剑指offer》不推荐《算法导论》即使盖方便面也有点重了

视频

《LeetCode刷题班》《直通bat算法刷题课》小甲鱼的一些经典算法课程

其他

五分钟学算法的算法动画

程序员小灰的漫画算法

LeetCode或LintCode

总结

关于算法的学习,今天就先讲到这里。其实我们所讨论了算法学习方法更多地是面向笔试面试的,讲究的务实和高效,帮助你快速地了解要学习哪些内容,以及按照怎样的一个步骤去学习。

整体看来,先学好数据结构,然后用剑指offer强化练习,再去看一些算法书籍巩固基础,了解经典算法,最后上手LeetCode和真题,不断训练自己的解题能力,强化自己的算法能力,在考前一个月甚至几个月保持这样的状态和解题手感,会让你在实战时发挥更加出色。

THE END
1.数据结构难学吗,有哪些好的学习资料?2、学习资料选取的不合适,很多时候学不会,不是我们笨,而是教材垃圾。 任何人想学习数据结构,必须先熟练掌握一门编程语言,比如 C/C++ 语言,掌握熟练了,就可以开始学习数据结构和算法了。 很多人觉得数据结构难学,是因为没有找到合适的书籍或者视频。客观地讲,很多书籍和视频都不适合初学者,它们讲知识喜欢拽学术名词https://www.bilibili.com/read/cv31935482
2.数据结构与算法学习指南如何学习数据结构和算法 首先掌握常用的、基础的。然后在此基础上往进行扩展学习。 常用的、基础的数据结构和算法有20个。 数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树 算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。https://blog.csdn.net/erge353729094/article/details/107134763/
3.软件开发中的数据结构与算法选择与应用因此,持续学习和更新对于保持软件开发中的数据结构与算法的选择与应用的敏锐性和效率至关重要。综上所述,选择合适的数据结构和算法是软件开发中的关键决策之一。通过全面了解问题需求、评估和比较不同的选择、考虑性能和可维护性,并持续学习和更新,可以构建出高效、可维护和可扩展的系统。https://baijiahao.baidu.com/s?id=1775524917941693755&wfr=spider&for=pc
4.什么是数据结构?什么是算法?怎么学习数据结构与算法?学习算法,我们不需要死记硬背那些冗长复杂的背景知识、底层原理、指令语法……需要做的是领悟算法思想、理解算法对内存空间和性能的影响,以及开动脑筋去寻求解决问题的最佳方案。相比编程领域的其他技术,算法更纯粹,更接近数学,也更具有趣味性。 本文将回顾数据结构与算法的基础知识,学习日常所接触场景中的一些算法和策https://maimai.cn/article/detail?fid=1744039689&efid=u2sSJyH6RePBrCh7o1dCfA
5.Python怎么从小白变大神?这些学习技巧你一定要知道!Python是一种简单易学、功能强大的编程语言,越来越受到人们的关注和喜爱。要从小白变成Python大神,需要掌握Python的基础语法、数据结构、算法和编程思想,并进行大量的实践和探索。 下面是一些详细的步骤,帮助您从小白变成Python大神: 1.学习Python基础语法 Python的基础语法包括变量、数据类型、运算符、控制结构、函数等,https://www.yutu.cn/news_52077.html
6.《算法与数据结构》精品课:线上线下融合,师生协力共创编程教学新该课程旨在教授学生基本的算法和数据结构知识,培养他们分析和解决计算问题的能力,提高程序设计的效率和质量。课程教授各类基础数据结构与常见的算法设计技巧,引导学生进行算法复杂度分析,并在学生掌握基本概念后,再引入一些高阶的数据结构与算法。这门课程也为学生进一步深入学习计算机科学领域的高级课程打下坚实的基础。https://sist.shanghaitech.edu.cn/_t335/2023/1205/c2858a1086548/page.htm
7.数据结构和算法——kd树腾讯云开发者社区这样的话,检索效率会下降,为了避免这样的情况的出现,会对二叉树设置一些条件,如平衡二叉树。对于二叉排序树的更多内容,可以参见数据结构和算法——二叉排序树。 2、kd树的概念 kd树与二叉排序树的基本思想类似,与二叉排序树不同的是,在kd树中,每一个节点表示的是一个样本,通过选择样本中的某一维特征,将样本划分到https://cloud.tencent.com/developer/article/1060801
8.如何学习数据结构与算法?(加油,你可以的)jaiodfjiaodf如何学习数据结构与算法? (加油,你可以的) 精通一个领域(数据结构与算法) Chunk it up 切碎知识点 数据结构(https://naotu.baidu.com/file/b832f043e2ead159d584cca4efb19703?token=7a6a56eb2630548c) 庖丁解牛 把数据结构的一个又一个知识点分解开来https://www.cnblogs.com/ssaylo/p/12676845.html
9.数据结构和算法学习心得为什么学数据结构和算法 最近在极客上学习了一个课程【数据结构和算法之美】,已经看了基础篇,总的来说,讲得比较通俗易懂,目前还没有代码操作,这也是后续要做的。之所以重温学习数据结构和算法,而不是去学那些新的技术架构和框架,是因为我认为数据结构、算法、设计模式、领域驱动设计DDD是技术思想和方法论之类的知识https://www.jianshu.com/p/64cf33e9b5ed
10.学[数据结构算法]的资源推荐我在初学编程以及学习数据结构的时候,一直有个想问却害怕问出来被嫌弃的问题,那就是“数据结构学了有啥用?算法和数据结构又是啥关系”,那时候懵懵懂懂的,好像明白却又具体回答不上来,说不出所以然。 现在明白了。 有这么一句话说“程序=数据结构+算法”,也有人说“如果把编程比作做菜,那么数据结构就好比食材(https://zhuanlan.zhihu.com/p/23191006