大家好,如果您正在准备编程工作面试或正在寻找新工作,那么您知道这不是一个容易的过程。 在您职业的任何阶段,您都必须幸运地接到电话并进行第一轮面试,但是在初学者方面,当您寻找第一份工作时就更加困难。 这就是为什么您不能只是轻描淡写。 您必须准备抓住这个机会,为此,您必须知道在面试中您期望得到的机会。
问什么,应该准备哪些主题,等等? 我已经在博客上写了很多关于您可以在此博客中找到有用文章的文章,但回顾一下,让我告诉您,除了数据结构问题 , 系统设计问题以及特定于编程语言的问题(如Java或Scala)之外 ,大多数编程工作面试也询问基于算法的问题。
这些基于常见的搜索和排序算法,例如
二进制搜索 , 图算法等。 练习这些基于算法的问题很重要,因为尽管它们看起来很明显且容易,但有时在实际面试中很难解决,特别是如果您从未亲自编码过。
之前已经练习过它们,不仅使您熟悉它们,还使您更有信心向面试官解释解决方案,这在选择中起着非常重要的作用。 它还使您为任何扭曲的问题和替代性问题做好了准备,例如采访者经常想让您使用递归或迭代来解决特定的编码问题。
有时,如果使用的数据结构类似于我在String上查找重复字符所使用的数据结构,则它们会要求您解决该问题而不使用Set数据结构。 那只是一些常见的例子,这就是为什么实践很重要的原因。
来自编码面试的20多种搜索和排序算法问题
无论如何,这是一些来自访谈的常见搜索和排序算法问题:
1.您可以实现二进制搜索算法吗? ( 解决方案 )
二进制搜索很容易,它是一种分而治之的算法,该算法将问题分为子问题,并加以解决。 这是一种搜索算法,因此可用于查找整数数组中的数字或目录中的项目。
实现二进制搜索算法的最简单方法是使用递归,这是解决方案链接所包含的内容,但是在查看解决方案之前,您应该自己尝试一下。
值得一提的是输入必须排序,我的意思是只能在排序数组中实现二进制搜索。
2.编写程序以实现线性搜索算法? ( 解决方案 )
它甚至比二进制搜索更容易,您所需要做的就是使用for循环或递归方法遍历数组中的所有元素,然后将每个元素与要搜索的元素进行比较。 当元素匹配时,根据您的要求返回index或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