百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

haoteby 2025-03-01 14:00 25 浏览

作者 | 黄小斜

责编 | 屠敏

本文思维导图

什么是算法

上回我们有一篇文章,讲述了作为一个新人程序员,如何学习数据结构这门课程,其实呢,数据结构和算法是息息相关的,为什么这么说呢,因为数据结构本身只是一个载体,而在数据结构之上产生作用和输出价值的东西其实是算法。

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

根据百度百科的介绍,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

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

认识算法的N个阶段

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

第二次认识算法,还是在研究生期间找实习工作的时候,面试的时候总有一些关于算法知识的考察,这些算法题比之前自己学数据结构的时候要更难一些,比如要让你描述一下快排的过程,或者是二分查找的过程,由于是电话面试居多,一般都不会考察太复杂的问题。

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

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

算法学习之路

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

数据结构与算法

数据结构这门课,其实很多时候就是我们的算法启蒙课,当初我是在考研的时候复习的,用的教材是《天勤数据结构》但是对于不考研的同学来说,我觉得还有很多不错的书可以参考,比如《大话数据结构》学好数据结构是学好算法的基础,至于怎么学习数据结构,比如回去看看咱们的上一篇文章,你就可以得知一二了。

直接上剑指offer

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

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

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

笔试题级别的算法怎么学

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

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

而这些算法,我之前也一直没找到合适的学习方式,总是东一榔头,西一棒子,看一些碎片化的文章来学习。直到后来我看到了基本还不错的算法书,比如《算法图解》以及《啊哈算法》把一些比较有难度的经典算法都做了介绍和讲解,当然了,现在还有很多的算法爱好者会做一些这类算法的分享,比如五分钟学算法的算法动画,程序员小灰的漫画算法,都是比较出色的例子。

搞定LeetCode和真题

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

LeetCode的题库有非常多的题目,但我其实也只刷了150道题而已,当初我跟着一篇LeetCode刷题指南完成了刷题,详见:
https://github.com/h2pl/leetcode,当时我把很多常考类型的题目都刷了一遍。其实,LeetCode的题目一般刷2-3遍是比较靠谱的,看到原题的时候要保证自己能做对。

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

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

推荐资源

算法类的学习资源可以说是非常多了,这里我只推荐一些我觉得还不错的资源,但是内容也不会少,够你们看很长一段时间的了。

数据结构方面的资源可以参考这篇文章,这里主要推荐算法方面的学习资源。

书籍

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

视频

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

其他

  • 五分钟学算法的算法动画

  • 程序员小灰的漫画算法

  • LeetCode或LintCode

总结

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

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

相关推荐

全球仅 1 辆!粉橙“郁金香”GT4 RS炸街,赞德沃特周末围观指南

“各位直男同胞,如果你女友突然送你一束‘郁金香’,别急着感动——万一钥匙在手,0-100km/h3.4秒,你会先感动还是先腿软?”...

国际足坛那些与国旗无关的国家队球衣

在世界足坛,国家队的球衣颜色一般都与国旗的颜色有关,不过也有例外。都知道意大利球衣由绿白红三色组成,但意大利球衣却是蓝色的,这是为什么呢?事实上意大利从1922年起就穿蓝色球衣,而那是当时意大利王室的...

世界主权国家国旗一览(欧洲篇)_世界国家的旗帜

1、芬兰(芬兰共和国)2、瑞典(瑞典王国)3、挪威(挪威王国)4、冰岛(冰岛共和国...

“黑色”机场:17国国旗全降半旗,荷兰王室和政府成员沉默以待

8年前,也就是2014年的7月23日,荷兰国王夫妇一身深沉黑装走在队伍的最前沿,身后跟着的是政府总理以及部分高级官员,没有例外,这些人的着装全都是清一色的黑装。不仅于此,机场上空的17个国家国旗也全部...

LiveScore为范戴克庆生:史上唯一举起英超奖杯的荷兰队长

今天是利物浦队长范戴克的34岁生日,媒体LiveScore晒出海报为范戴克庆生。海报中,范戴克身披荷兰国旗,手举英超奖杯。LiveScore写道:“祝范戴克生日快乐!史上唯一举起英超奖杯的荷兰队长!...

为何很多国家都用三色条纹国旗?_为什么很多国家国旗是三道杠

为何很多国家都用三色条纹国旗?你有没有发现,很多国家的国旗都是三种颜色的条纹旗,荷兰、俄罗斯、法国的国旗甚至连颜色都一样,实在是很难区分。据统计,世界上近1/3的国家都用的是三色条纹旗:俄罗斯是横着的...

西欧12个国家国旗的设计者和由来_西欧12个国家国旗的设计者和由来简介

1、法国国旗的设计者:答:雅克·路易·大卫:出生于法国巴黎,法国新古典主义画派画家,毕业于法国皇家绘画雕塑院。1794年设计的三色旗被正式采用为法国国旗。2、俄罗斯国旗的设计者:答:彼得一世:出生于莫...

世界杯再现橙色风暴,荷兰队为何要穿橙色?原因竟是个谐音梗

在世界杯上的荷兰队,总是给人留下深刻的印象。大开大合的全攻全守踢法,两翼齐飞的性感足球让人过目不忘。作为球迷,首先希望橙色军团荷兰队能在2022年,再次掀起郁金香风暴。荷兰队的橙色球衣给人以青春活力的...

国旗太像了!欧洲人自己也分不清,闹了不少笑话

国旗是一个国家身份的象征。但很多小伙伴都发现了,欧洲很多国家的国旗都十分相似,“傻傻分不清”。...

每日一旗——西欧篇荷兰_荷兰 西欧

从这期文章开始,我将在每一期文章里给大家介绍一面国旗,(希望我能够坚持下去...

剧荒吗?爱奇艺高热度“谍战剧”TOP5,剧粉不容错过!

Win2000服务器配置共享权限的老问题至今还在坑人,运维稍不留神就被各种"访问被拒"搞崩溃。关键得揪住三个死结:SMB协议兼容性、跨系统认证机制、权限继承逻辑,少一个环节全网瘫痪。W...

紧急 全球爆发比特币勒索病毒攻击,紧急应对措施!

北京时间2017年5月12日20时左右,全球爆发大规模勒索软件感染事件,我国大量行业企业内网、阿里云等大规模感染,教育网受损严重,攻击造成了教学系统瘫痪,甚至包括校园一卡通系统。判定该勒索软件是...

曾利用驱动人生升级通道传播的木马下载器攻击方法再次升级

一、概述御见威胁情报中心1月25日再次监测到曾利用驱动人生升级通道传播的木马下载器攻击方法再升级。本次升级主要变化在于攻击模块,木马在之前的版本上,新增计划任务“DnsScan”,在其中将永恒之蓝攻击...

【建议收藏】292个聚丙烯牌号性能、用途汇总!

聚丙烯(PP)作为五大通用塑料之一,其产量占据着世界第二把交椅,国内产量也是不可小觑。...

系统小技巧:改变Windows 10默认登录验证方式

在早期的WindowsXP或Vista系统中,密码凭据是登录系统的唯一选项。Windows10则大大不同,它在登录时能够提供包括本地账户密码、网络账户密码、Pin码、图形码以及其他各种验证识别方式...