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

    文章

    4593

    浏览量

    92547
  • 编程
    +关注

    关注

    88

    文章

    3577

    浏览量

    93545

原文标题:LeetCode ,YYDS!

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

收藏 人收藏

    评论

    相关推荐

    参加电赛需要准备什么

    参加电子设计竞赛(电赛)需要准备的内容相当广泛,以下是一些关键的准备事项:
    的头像 发表于 10-30 09:27 127次阅读
    参加电赛需要<b class='flag-5'>准备</b>什么

    高校开展RK3588课研究 只能人工标注练算法

    瑞芯微推出的RK3588系列图像处理板作为国产化板卡的性能巅峰,成为了各领域研究开发的必选项,它能实现稳定的目标检测、识别以及跟踪,具有重要的研究开发价值。特别是对于高校而言,将RK3588作为课题
    的头像 发表于 10-23 08:07 170次阅读
    高校开展RK3588课<b class='flag-5'>题</b>研究    只能人工标注练<b class='flag-5'>算法</b>?

    压缩算法类型和应用

    压缩算法是一种通过减少数据量来节省存储空间或传输数据的技术。压缩算法可以分为两种类型:有损压缩和无损压缩。
    的头像 发表于 10-21 13:50 166次阅读

    思尔芯赛正式发布,邀你共战EDA精英挑战赛!

    发布COMPETITIONRELEASE2024中国研究生创芯大赛·EDA精英挑战赛(原“集成电路EDA设计精英挑战赛”)现已正式拉开帷幕。作为核心出题企业之一思尔芯(S2C),已经为你们准备
    的头像 发表于 08-03 08:24 503次阅读
    思尔芯赛<b class='flag-5'>题</b>正式发布,邀你共战EDA精英挑战赛!

    充电也要算法?储能充电芯片中的算法处理器

    或充电设备中,负责实时监控电池状态,执行充电策略,并调整充电参数,如电流和电压。   比如算法处理器可以执行复杂的充电算法,如恒流/恒压充电、脉冲充电、智能协商充电等,这些算法能够根据
    的头像 发表于 07-30 00:07 3563次阅读

    利用Matlab函数实现深度学习算法

    在Matlab中实现深度学习算法是一个复杂但强大的过程,可以应用于各种领域,如图像识别、自然语言处理、时间序列预测等。这里,我将概述一个基本的流程,包括环境设置、数据准备、模型设计、训练过程、以及测试和评估,并提供一个基于Mat
    的头像 发表于 07-14 14:21 1835次阅读

    神经网络算法的结构有哪些类型

    神经网络算法是深度学习的基础,它们在许多领域都有广泛的应用,如图像识别、自然语言处理、语音识别等。神经网络的结构有很多种类型,每种类型都有其独特的特点和应用场景。以下是对神经网络算法
    的头像 发表于 07-03 09:50 373次阅读

    交换芯片有哪些类型

    交换芯片的类型可以根据多个维度进行分类,包括它们的应用领域、性能特点、功能集成度以及支持的网络标准等。
    的头像 发表于 03-21 17:22 1083次阅读

    C语言数据类型有哪些

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

    直线马达的控制策略

    直线马达通常分为无铁芯U型槽、有铁芯平板以及轴棒直线马达三大类,而无论哪类直线马达,控制策略大多包括位置控制、速度控制和力控制三种模式。 其中,在位置控制方面,通常采用PID控制算法,通过测量电机
    的头像 发表于 02-25 10:40 374次阅读
    直线马达的控制<b class='flag-5'>策略</b>

    什么是电容器以及有哪些不同类型

    114k。仅仅维护这种 SKU 数量就需要大量的文书工作、大量的叉车里程以及大量与实物库存相关的现金。能够在收到订单后短短 15 分钟内对这些产品进行重新包装并将其送至装货码头准备装运,这堪称现代工业的一个小奇迹。为什么要在简单的两端元件上花费如此多的精力?电压和电流额
    的头像 发表于 02-13 15:58 1181次阅读
    什么是电容器<b class='flag-5'>以及</b>有哪些不同<b class='flag-5'>类型</b>?

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

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

    目前主流的深度学习算法模型和应用案例

    深度学习在科学计算中获得了广泛的普及,其算法被广泛用于解决复杂问题的行业。所有深度学习算法都使用不同类型的神经网络来执行特定任务。
    的头像 发表于 01-03 10:28 1699次阅读
    目前主流的深度学习<b class='flag-5'>算法</b>模型和应用案例

    MATLAB程序算法实例

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

    redis的淘汰策略

    Redis是一种基于内存的键值存储系统,为了充分利用内存,Redis采用了一些淘汰策略来管理内存空间。淘汰策略的作用是当内存空间不足时,选择合适的数据对象进行淘汰,释放出更多的内存空间,以供后续
    的头像 发表于 12-04 16:23 516次阅读