程序员面试算法_程序员的前20个搜索和排序算法面试问题

程序员面试算法

大家好,如果您正在准备编程工作面试或正在寻找新工作,那么您知道这不是一个容易的过程。 在您职业的任何阶段,您都必须幸运地接到电话并进行第一轮面试,但是在初学者方面,当您寻找第一份工作时就更加困难。 这就是为什么您不能只是轻率抓住机会。 您必须准备抓住这个机会,为此,您必须知道在面试中您期望得到的机会。

问什么,您应该准备什么主题,等等? 我已经在博客上写了很多关于您可以在此博客中找到有用文章的文章,但回顾一下,让我告诉您,除了数据结构问题 , 系统设计问题以及特定于编程语言的问题(如Java或Scala)之外 ,大多数编程工作面试也询问基于算法的问题。

这些基于常见的搜索和排序算法,例如
二进制搜索 , 图算法等。 练习这些基于算法的问题很重要,因为即使它们看起来很明显且容易,但有时在实际面试中很难解决,特别是如果您从未亲自编码过。

之前已经练习过它们,不仅使您熟悉它们,而且使您更有信心向面试官解释解决方案,这在选择中起着非常重要的作用。 它还使您为任何棘手的问题和替代性问题做好了准备,例如采访者经常想让您使用递归或迭代来解决特定的编码问题。

有时,如果使用的数据结构类似于我在String上查找重复字符所使用的数据结构,则它们会要求您解决该问题而不使用Set数据结构。 那只是一些常见的例子,这就是为什么实践很重要的原因。

来自编码面试的20多种搜索和排序算法问题

无论如何,这是一些来自访谈的常见搜索和排序算法问题:

1.您可以实现二进制搜索算法吗? ( 解决方案 )

二进制搜索很容易,它是一种分而治之的算法,该算法将问题分为子问题,并加以解决。 这是一种搜索算法,因此可用于查找整数数组中的数字或目录中的项目。

实现二进制搜索算法的最简单方法是使用递归,这是解决方案链接所包含的内容,但是在查看解决方案之前,您应该自己尝试一下。

值得一提的是输入必须排序,我的意思是只能在排序数组中实现二进制搜索。

2.编写程序以实现线性搜索算法? ( 解决方案 )

它甚至比二进制搜索更容易,您所需要做的就是使用for循环或递归方法遍历数组中的所有元素,并将每个元素与要搜索的元素进行比较。 当元素匹配时,根据您的要求返回索引或true / false。

例如,如果您正在编写一个contains()方法,则可以返回true或false来指示数组中是否存在元素。 由于需要扫描整个数组以查找元素,因此该算法的时间复杂度为O(n)。

3.是否可以实现没有递归的二进制搜索算法? ( 解决方案 )

您可能知道,可以通过使用循环或有时使用堆栈来将递归算法替换为迭代算法。 对于二进制搜索,您也可以执行此操作,只需将数组划分并比较中间元素,直到找到目标元素或数组中没有其他元素为止。 如果目标元素大于中间元素,则必须向右移动,否则向左移动。

排序算法

4.编写代码以在二叉树中实现级别顺序搜索? (解)

在级别顺序搜索中,您首先要访问同级节点,而不是进入下一个级别。 您可以使用Queue在二叉树中实现级别顺序搜索。如果您想了解更多信息,可以在freeCodeCamp上查看所有这些免费数据结构和算法课程 。

5.实现冒泡排序算法? ( 解决方案 )

这不是您学习的第一个排序算法吗? 好吧,我做到了,这就是为什么我记得冒泡排序是关于将数组中的每个数字与其他数字进行比较,以便在每次传递最大或最小元素后冒泡到顶部。 我的意思是发现它已按排序顺序放置。 这是基本算法之一,其时间复杂度为O(n ^ 2),这使得它无法用于大量数字,但对于少量数字却表现出色。

6.稳定和不稳定排序算法之间的区别? ( 回答 )

这是一个棘手的概念,直到很久以前我才知道。 我还没有遇到过这种情况的任何实际用例,但是只是从访谈的角度知道这个概念还可以。 在稳定的排序算法中,即使排序后,同一元素的顺序也保持不变,但是在不稳定的排序算法中,这会发生变化。 一个很好的例子是快速排序和合并排序,其中前者不稳定,而后者则是稳定算法。

7.什么是二叉树的深度优先搜索算法? (解)

这是另一种流行的搜索算法,主要用于树和图形。 该算法首先在相同级别搜索之前先深入访问节点,这就是为什么使用深度优先搜索算法的原因。 实施起来很棘手,但是您可以使用Stack来实现DFS或深度优先搜索算法。

排序算法

8.如何实现迭代快速排序算法? ( 解决方案 )

显然没有递归:-)。 如果您还记得,我之前曾告诉过您,您可以使用Stack将递归算法转换为迭代算法,这也是在不递归的情况下实现Quicksort算法的方法。 如果您需要有关实施的更多帮助,则可以进一步查看该解决方案。

9.如何实现计数排序算法? ( 解决方案 )

就像我们对其他O(n)排序算法(例如Radix排序和Bucket排序)所做的一样。 如果您不知道Counting sort是另一种整数排序算法,则可以根据较小整数的键对对象集合进行排序。 它具有O(n)时间复杂度,使其比喜欢的速度更快 Quicksort和Mergesort用于一组特定的输入。 有关更多详细信息,请参见解决方案。

10.如何在不使用第三个变量的情况下交换两个数字? ( 解决方案 )

另一个棘手的问题,如果您知道窍门,这很容易:-)如果您可以将一个数字存储在一个数字中,然后将其减去其他数字,则可以在不使用临时变量或第三个变量的情况下交换两个数字

a = 3;

b = 5;

a = a + b; // 8

b = a-b; // 3 a = a — b; // 5

现在您有a = 5和b = 3,因此无需使用第三个或temp变量就可以交换数字。

11.如何实现基数排序算法? ( 解决方案 )

这是另一种具有O(n)时间复杂度的整数排序算法。 根据Wikipedia,Radix排序是一种非比较排序算法 ,该算法通过按共享相同有效位和值的单个数字对键进行分组,从而使用整数键对数据进行排序 。 您可以进一步查看该解决方案以了解实施细节。

12.如何实现插入排序算法? ( 解决方案 )

您是否曾经在您的橱柜中布置了扑克牌或衬衫? 这两件事之间有什么共同点? 好吧,您将下一张卡片或衬衫放到适当的位置,或者,我应该说您将下一个元素插入其适当的位置。 这就是您的插入方式。

13.编写算法以检查两个矩形是否相互重叠? ( 解决方案 )

这是一个棘手的算法问题,但是如果您必须在2D数学课上听老师讲课,则可以解决此问题。 还有另一个技巧,检查矩形不重叠时的所有条件,如果条件不成立,则意味着两个矩形都重叠。 例如,如果一个矩形的上侧低于其他矩形的下侧,则它们在垂直对齐时不会重叠。

14.合并排序算法如何实现? ( 解决方案 )

与快速排序类似,合并排序也进行了划分和征服算法,即您可以对数组进行划分,直到可以对数组中的最小数组进行排序,例如具有一个或零元素的数组。 对小数组进行排序后,可以将它们合并以获得最终结果。

Quicksort和Mergesort之间的唯一区别是mergesort是稳定的,而Quicksort是不稳定的。 这意味着相等元素在排序前后保留其位置。

另一个值得注意的区别是,即使两者均具有O(NLogN)的平均时间,使用Quicksort比mergesort更好,因为对于相同数量的输入,Quicksort花费的时间更少,而Quicksort中的常数因子比merge sort少。

排序算法

15.如何实现存储桶排序算法? ( 解决方案 )

Bucket排序是另一种很棒的算法,可以对数组进行排序,甚至不比较元素。 它被称为非比较排序算法,可以为所选输入提供O(n)性能。

16.编写算法来检查两个字符串是否为字母( 解决方案 )

字谜是长度和字符匹配但顺序不匹配的东西,例如Army和Mary都具有相同数量的字符。 解决此问题的一个技巧是对字符进行排序并检查它们是否相同。

17.用您喜欢的编程语言实现QuickSort算法吗? ( 解决方案 )

这是一种非常简单的排序算法,但是只有当您练习过之后,否则您可能会迷路。 请记住,Quicksort是一个分而治之的算法,这意味着您可以保持数组的划分,也称为分区。 然后,您可以在最小级别上解决问题,也称为基本案例,例如您的数组仅包含一个或零个元素时。

18.如何检查两个String是否相互旋转? ( 解决方案 )

有一个简单的技巧可以解决此问题,只需将String与自身连接起来,然后检查旋转是否存在。 如果串联的String包含旋转,则给定的String是前者的旋转。

19,比较和非比较排序算法之间的区别? ( 回答 )

顾名思义,在基于比较的排序算法中,您必须像对快速排序一样对元素进行排序,但是在诸如计数排序之类的非基于比较的排序算法中,可以不对元素进行比较。 惊讶吗 好吧,那么,我建议您阅读本课程,以了解有关O(n)排序算法的更多信息,例如基数排序,计数排序和存储桶排序。


20.实现素数的Eratosthenes算法筛? ( 解决方案 )
这是难以实施的算法之一,特别是如果您不记得的话:-)有时候面试官会给您解释,而其他时候您需要记住它。

这些是数据结构和算法之外的一些最常见问题,可帮助您在面试中表现出色。

我在博客上也分享了很多这些问题,因此,如果您真的很感兴趣,可以随时去那里搜索。

这些常见的编码, 数据结构和算法问题是您要成功采访任何规模的任何公司(不论大小)都需要知道的问题 。

如果您正在寻找2019年的编程或软件开发工作,则可以使用此编码问题列表开始准备工作。

此列表提供了准备的好主题,还有助于评估您的准备工作,以找出您的长处和短处。

良好的数据结构和算法知识对于成功编写采访面试至关重要,因此您应该集中精力进行大部分工作。

结束语

谢谢,您到了本文的结尾……祝您编程采访顺利! 这当然不会很容易,但是通过遵循此搜索和排序算法问题,您将比其他人迈出一步。

如果你喜欢这篇文章,那么请一起分享你的朋友和同事,不要忘记遵循javarevisited Twitter和javinpaul以及!

翻译自: https://www.javacodegeeks.com/2019/04/searching-sorting-algorithms-interview-questions-programmers.html

程序员面试算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

御用导航提示页面_UI网站导航设计知识与五个知识案例

导航设计是网站的基石。它确定了至关重要的指标,例如转化率和跳出率,页面停留时间,点击量,并且通常是决定您的访问者拥有良好体验并以比您所说的“用户流量”更快退出网站的决定性因素。但是,好的设计是什么样的呢?一…

Servlet规范中定义的过滤器

文章目录什么是过滤器写过滤器的步骤配置初始化参数过滤器的优先级过滤器的优点过滤器执行过程图解过滤敏感词的示例代码使用 Servlet 来过滤敏感词使用过滤器来过滤敏感词通过配置初始化参数来设置敏感词关于 web.xml 的配置什么是过滤器 Servlet 规范当中定义的一种特殊的类…

Spring Boot错误–创建在类路径资源DataSourceAutoConfiguration中定义的名称为“ dataSource”的bean时出错...

大家好,如果您使用的是Spring Boot,并且遇到诸如“无法为数据库类型NONE确定嵌入式数据库驱动程序类”或“在类路径资源ataSourceAutoConfiguration中定义的名称为dataSource的bean创建错误”之类的错误,那么您来对地方了地点。 在本文中&…

simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成

前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题。1.EPB模型准备用来举例说明的模型很简…

通过Socket实现文件上传/上传文件

文章目录整个功能的实现步骤客户端的实现步骤服务端的实现步骤示例代码整个功能的实现步骤 1.客户端使用本地的字节输入流读取被上传的文件数据 2.客户端使用网络字节输出流,将读取到的文件数据发送给服务端 3.服务端使用网络字节输入流读取客户端发送过来的文件数…

构造函数调用默认构造函数_显式无参数构造函数与默认构造函数

构造函数调用默认构造函数大多数不熟悉Java的开发人员都会Swift了解到,如果他们没有指定至少一个显式构造函数,则会为Java类隐式创建一个“ 默认构造函数 ”( 由javac进行创建)。 Java语言规范的 8.8.9节简要指出:“如…

Artifact到底是什么

将项目构建成一个可以在服务器部署的文件包(如:war 包或者 exploded 的文件包),或者构建成的 jar 包(这些 jar 包通常是某些模块程序文件,也可以是某些插件程序文件),这些都叫 Artif…

python win10 桌面_Python3如何实现Win10桌面自动切换

得空写了个自动切换桌面背景图片的小程序。再不写python就要扔键盘了,对vue还有那么一点好感,天天php真是有够烦。准备工作准备个文件夹放在桌面上,平时看到什么高清好图就拽进去。运行脚本脚本如下:#!/usr/bin/pythonimport ctyp…

java中抽象类继承抽象类_用Java中的抽象类扩展抽象类

java中抽象类继承抽象类示例问题 当我创建Java :: Geci抽象类AbstractFieldsGenerator和AbstractFilteredFieldsGenerator我遇到了一个不太复杂的设计问题。 我想强调一下,这个问题和设计对于某些人来说似乎很明显,但是在我最近与一位初级开发人员&#…

pb90代码如何连接sql2008r2_如何使用 HTTP Headers 来保护你的 Web 应用

众所周知,无论是简单的小网页还是复杂的单页应用,Web 应用都是网络攻击的目标。2016 年,这种最主要的攻击模式 —— 攻击 web 应用,造成了大约 40% 的数据泄露。事实上,现在来说,了解网络安全并不是锦上添花…

Servlet配置初始化参数/配置参数

文章目录给某个Servlet配置初始化参数配置全局的参数ServletConfig给某个Servlet配置初始化参数 也可以通过注解的方式来配置初始化参数: 在 Servlet 中获取针对 Servlet 的参数值: String version getInitParameter("version");配置全局的…

poi动态创建文档_POI创建的文档具有不同条件的灵活样式

poi动态创建文档介绍 这篇文章解释了基于各种标准将样式应用于文档的困难并提供了解决方案。 Java编程中的常见任务之一是根据存储在数据库中的数据创建Excel报告。 在这些情况下,Java程序员使用POI :-)。 这些报告通常对样式和数据格式有严格的规定。 数据通常是SQ…

python编码程序_python 编码

网页的编码方式是简体中文gb2312 (查看网页源码,可以看到),而python内部的编码方式为unicode,之前的代码是这样的:contentAll urllib.urlopen(urlLink).read()soup BeautifulSoup.BeautifulSoup(contentAll) #生成BeautifulSou…

比特(bit)_二进制数

二进制数位,也叫比特位,其实就是指位置,是指二进制数的位置。例如,0101 这是二进制数,而且是 4 位的二进制数,因为有 4 个位置,每个位置放一个二进制数,确切的说是每个位置放一个二进…

javax线程池超时结束_没有Javax的Jakarta EE:这次世界也不会结束

javax线程池超时结束如果您错过了新闻, Oracle将向Eclipse基金会捐赠Java EE规范 。 这个决定是在规范过程中进行了相当长时间的Hibernate之后,人们理所当然地怀疑Oracle丧失了对Java EE的战略兴趣。 首先,Java EE和更广泛的Java社区很好地满…

Final Cut Pro X如何去视频水印/视频去水印

先剪辑好视频(比如把不要的段切掉),然后选中视频,把它复制一份到另一个轨道(按住option键,用鼠标左键拖放即可复制)点击右下角的 效果(Effect)→ 模糊(Blur)→ 高斯模糊(Gaussian),把高斯模糊拖入上边那条轨道再次选择效果(Effect…

为什么线程池里的方法会执行两次_面试官问你java都有哪些线程池,自己是否自定义过线程池...

我还记得大学实习面试时,被问到什么是线程池这个问题,因为这个题我被录取了,原因就是我背出来了,而另外一个面试的没背出来,说实话当时还真不知道它是干什么的,就是看面试题给背下来了,在之后就…

java中两任务并行运行_Java并行编程中的“可调用”与“可运行”任务

java中两任务并行运行当我们用Java编写多线程应用程序时,我们倾向于使用“ Runnable ”接口来实现线程类。 您的类必须简单地实现此接口并覆盖run方法。 对于琐碎的用例,我们可以通过调用“ start”方法直接启动线程,结果将控制流委托给run…

Servlet中的监听器

文章目录什么是监听器如何写监听器配置监听器统计在线人数的案例什么是监听器 Servlet 规范当中定义的一种特殊的类,作用是监听容器当中产生的一些事件并进行相应的处理。 容器产生的事件指的是两大类事件: 第一大类 生命周期相关的事件,指…

python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法:首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下:创建后会获得如下信息:APP_ID ******API_KEY …