0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

算法题类型以及准备策略

算法与数据结构 来源:Coder梁 作者:梁唐 2021-09-02 10:50 次阅读

今天就和大家聊聊大公司的面试环节经常涉及的算法题类型以及准备策略。

问题难度首先大家比较关心的就是面试时候出现的算法题的难度,从我的个人经验来看,除了有一次和同样有acm获奖经历的面试官切磋了一次之外,基本上难度都没有超过LeetCode的困难难度。并且这还是因为我有acm经历加成的情况下,大部分问题都只有LeetCode Medium的难度。

当然LeetCode的中等难度这个范围也是比较宽的,既有非常简单无聊的水题,也有比较棘手,值得深入思考的高价值问题。所以只是知道这一点一点用也没有,想要知道对自己来说究竟有多难,还是需要自己亲身体会一下。

但可以非常肯定地说,LeetCode中Medium难度下的问题所用到的算法,基本上都在大学算法课程的内容里。几乎没有超纲的内容,也不涉及比较复杂和困难的数据结构,都是非常非常基础的,甚至都远远达不到高中信息竞赛的水平。我一点没和大家夸张,下面这张图是我网盘里当年高中竞赛的课件,大家可以感受一下难度。

但是算法这个东西,大家千万不要被吓到,主要是心理上唬人,实际的难度并没有那么大。真正下定决心去练习,从入门到精通也不过是几个月的事情。我当年好几个队友都是大学才开始编程,短短半年时间已经在赛场上独当一面了。

常见的题型面试或者白板编程,由于形式的限制,题目的选择范围其实并不大。并不难理解,毕竟面试的时间有限,也不能全拿来做题,而太困难太复杂的问题候选人一点思路也没有,大部分人都做不上来,也完全起不到考察和筛选的意义。

所以拿来当做面试和白板编程的问题,不会很复杂,至少会保证绝大多数的候选人都听说过。就好像打游戏一样,哪怕是玩家津津乐道的魂游戏,总要有过关的可能。如果上来就考察一个问题,结果你连正解用到的算法都没听说过,一开始就没有做出来的可能,这种问题问了就只能浪费时间。

根据我的经验,面试当中常问的问题基本上就这几种:二分、递归、分治、排序、动态规划。

这几种算法只要是科班出身,基本上都或多或少听说过,理论上来说都应该能做出来。并且这些算法除了比较基础之外,它们的代码量都不大,一般核心代码都不会超过30行,确保编码的时间不会太长。第二是比较考验思维,通过你对这几个算法的理解深度,就足以看出来你的思维能力和算法能力了。

解题套路划好了重点,再分享几个解题的套路。

缩小问题规模有可能问题里问的是一个规模很大的问题,比如汉诺塔问题,要移动64个圆盘,这太复杂了,我们根本无法思考。不妨把问题的规模缩小,比如缩小到3个圆盘,然后我们就可以列举一下情况,找找规律和套路了。

即使是在acm赛场当中,这个方法也非常管用。

确定复杂度在acm赛场上题目当中都会标明数据的大小范围,除了起到限制作用之外也是一个很大的提示。我们可以根据数据的规模反推出正解的复杂度范围,从而排除掉一些不可能的算法。

比如说要在个数当中寻找某个数,由于计算机每秒的运行次数在这个量级,这么大的规模遍历一遍都有些扛不住,那么显然正解的复杂度一定在及以下。这么一来,我们就可以根据算法的复杂度排除掉一大批达不到要求的算法,排除错误的选项。

在面试的时候面试官往往不会明确给出数据的规模,我们可以自己结合实际情况分析,当然直接提问也是一个不错的选择。

优化思路面试不是比赛,并不是一定要给出正解。有的时候,我们一时陷入误区没想到解法也是常有的。重要的并不是我们是否想出了解法,而是我们能否展现我们思维的能力,打动面试官。

所以有的时候一下子没有想到最优解也没有关系,我们可以先易后难,先把一些简单可行的解法说出来,然后再进行优化。

比如LeetCode第4题,寻找两个有序数组的中位数。我们当然很难一下子想出的正解,但是我们可以先从最简单的方法说起。比如重新排序直接寻找,这样操作的复杂度是。说出这个方法之后,我们接着从不使用排序解决问题的角度继续思考,如此一步步逐渐深入,即使最终没能找到正解,也体现出了我们的思考是有章法的,并且思考和分析问题的能力是有的。

建议最后给大家分享几点我个人的小建议,帮助大家少走点弯路。

贵精不贵多如果是为了准备面试,就像我前面列举的一样,其实并不会涉及很多内容。相比去研究很多高大上面试的时候用不到的高大上算法,倒不如好好把这几个算法啃扎实。

就拿排序来说,想要全部搞明白就很不简单。我随便写几个问题,大家不妨对照一下看看能不能回答上来。

冒泡排序和选择排序有什么区别?

为什么说快速排序和归并排序都基于分治算法,但它们的最差复杂度不同?

排序的稳定性是什么?哪些算法是稳定的,哪些不是?

关于快速排序算法的最差复杂度,有哪些优化?

如果都能不仅仅满足原理,而是可以深入到细节的方方面面去钻研,那么即使只是准备了几个算法,应付一般的面试都不在话下。

成体系化训练算法的学习过程是比较痛苦的,尤其是如果我们漫无目的地去训练和学习,进展非常缓慢,非常劝退。很多同学都有刷题刷了一堆,但是水平好像没什么提升的情况。

我个人感觉比较有效的方法是成体系化的训练,不要按照题目顺序刷题,而是以算法划分专题,按照专题刷题。一个算法一个算法的硬啃,一个算法吃透再吃下一个。这样训练下来印象会非常深刻,对于算法的理解也会深刻得多,也不容易忘记。要比题目刷了一堆, 算法也用了一堆, 看起用得多,但也忘得多要好得多。

篇幅有限,今天就和大家聊到这里,感谢阅读和支持。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4438

    浏览量

    90552
  • 编程
    +关注

    关注

    88

    文章

    3432

    浏览量

    92221

原文标题:LeetCode ,YYDS!

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言数据类型有哪些

    在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
    发表于 03-20 10:56 106次阅读
    C语言数据<b class='flag-5'>类型</b>有哪些

    请问sigmastudio算法集成对什么资源有要求,以及有什么方法可以查看系统资源占用情况?

    您好, 目前基于ADSP-21565开发了一些基础音频功能,想知道目前系统占用了多少资源,还剩下多少资源,以此来评估后续的sigmastudio算法集成可行性。 请问sigmastudio算法集成对什么资源有要求,以及有什么方法
    发表于 01-10 08:28

    MATLAB程序算法实例

    什么是算法算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
    的头像 发表于 12-29 09:33 213次阅读
    MATLAB程序<b class='flag-5'>算法</b>实例

    Qlib的安装和运行内置算法策略

    下面我们就来试一下 Qlib 的安装和运行内置算法策略。 1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:《 超详细Python安装指南( 传统
    的头像 发表于 10-31 10:19 2025次阅读
    Qlib的安装和运行内置<b class='flag-5'>算法</b><b class='flag-5'>策略</b>

    如何通过策略模式简化if-else

    independently from clients that use it. 策略模式(Strategy Pattern):定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。 2、
    的头像 发表于 10-08 16:08 241次阅读
    如何通过<b class='flag-5'>策略</b>模式简化if-else

    什么是策略模式

    什么是策略模式 官话: 策略模式(Strategy Pattern): 定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略
    的头像 发表于 10-08 14:15 1584次阅读
    什么是<b class='flag-5'>策略</b>模式

    SVPWM的原理及法则推导和控制算法介绍

    包含SVPWM的算法介绍,基本原理,以及详细的公式推导,详细的图表示意,是初学FOC,准备自己手写FOC库或者理解FOC算法的工程师的有利手册,手册中也简单介绍了SVPWM与SPWM的
    发表于 10-07 09:13

    硬件经典面试100分享

    学电人员必备;硬件经典面试100;面向电子行业的面试基础问题,提前进入职业的大门
    发表于 09-27 06:23

    机器学习有哪些算法?机器学习分类算法有哪些?机器学习预判有哪些算法

    有许多不同的类型和应用。根据机器学习的任务类型,可以将其分为几种不同的算法类型。本文将介绍机器学习的算法
    的头像 发表于 08-17 16:30 1267次阅读

    机器学习算法汇总 机器学习算法分类 机器学习算法模型

    是解决具体问题的一系列步骤,机器学习的算法被设计用于从大量的数据中自动学习并不断改进自身的性能。本文将为大家介绍机器学习算法汇总和分类,以及常用的机器学习算法模型。 机器学习
    的头像 发表于 08-17 16:11 648次阅读

    无Anchor的目标检测算法边框回归策略

    导读 本文主要讲述:1.无Anchor的目标检测算法:YOLOv1,CenterNet,CornerNet的边框回归策略;2.有Anchor的目标检测算法:SSD,YOLOv2,Faster
    的头像 发表于 07-17 11:17 565次阅读
    无Anchor的目标检测<b class='flag-5'>算法</b>边框回归<b class='flag-5'>策略</b>

    微马达不同推进机制以及不同的传感策略探讨

    该文章综述了用于传感的微马达的发展历程,包括其推进机制、传感策略和应用(图1)。首先,概述了微马达的推进机制,包括基于燃料的推进机制和免燃料的推进机制。
    发表于 07-15 12:32 431次阅读
    微马达不同推进机制<b class='flag-5'>以及</b>不同的传感<b class='flag-5'>策略</b>探讨

    设计模式行为型:策略模式

    策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
    的头像 发表于 06-07 11:18 403次阅读
    设计模式行为型:<b class='flag-5'>策略</b>模式

    C++入门之通用算法

    C++ 是一种强大的编程语言,它提供了许多通用算法,可以用于各种容器类型。这些算法是通过迭代器来操作容器中的元素,因此它们是通用的,可以用于不同类型的容器。在本篇博客中,我们将详细介绍
    的头像 发表于 05-17 09:40 379次阅读

    求分享FS26唤醒策略

    FS26 唤醒策略
    发表于 04-21 06:33