前20个搜索和排序算法面试问题

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

基于基本算法(例如搜索,排序和字符串算法)的访谈中常见的编码问题集合

大家好,如果您正在准备编程工作面试或正在寻找新工作,那么您知道这不是一个容易的过程。 您必须幸运地接到电话并进行第一轮面试,不仅是初学者,而且是您职业生涯的任何阶段。

但是,是的,这对于初学者来说是最困难的。

这就是为什么您不能只是轻描淡写。 您必须准备抓住这个机会,为此,您必须知道在面试中您期望得到的机会。 问什么,应该准备哪些主题,等等?

我已经在博客上写了很多关于您可以在此博客中找到有用文章的文章,但回顾一下,让我告诉您,除了数据结构问题系统设计问题以及特定于编程语言的问题(如JavaC ++Scala)之外 ,大多数编程求职面试还会询问基于算法的问题。

这些基于常见的搜索和排序算法,例如字符串算法二进制搜索图形算法等。

练习这些基于算法的问题很重要,因为尽管它们看起来很明显且容易,但有时在实际面试中很难解决,特别是如果您从未亲自编码过。

在面试之前练习这些问题,不仅使您熟悉它们,而且使您更有信心向面试官解释解决方案,这在选择中起着非常重要的作用。

它还使您为任何扭曲的问题和替代性问题做好了准备,例如Interviewers经常想让您使用递归迭代来解决特定的编码问题。

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

顺便说一句,如果您是数据结构和算法领域的一个完整的初学者,那么我建议您首先学习一门全面的算法课程,例如数据结构和算法:在Udemy上使用Java深入学习,这不仅会教您基本的数据结构和算法,以及如何在现实世界中使用它们,以及如何使用它们解决编码问题。

数据结构和算法:使用Java进行深入研究

在另一方面,如果你喜欢阅读的书籍或喜欢的书籍在网上课程,那么你必须读一本书全面类似算法导论由托马斯·H·科门以获得共同的计算机科学算法,如搜索,排序,密码学,的理解图算法和一些常见的算法 ,例如傅立叶变换。

算法入门,第三版(麻省理工学院出版社)

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

无论如何,这是一些来自访谈的常见搜索和排序算法问题。 我已经链接了解决方案,但是在查看解决方案之前,您应该尝试解决问题。

本文的目的是您应该知道如何自行解决这些问题,但是,是的,如果您遇到困难并想比较解决方案,则可以看到解决方案。


1.您可以实现二进制搜索算法吗? 解决方案
二进制搜索很容易,它是一种分而治之的算法,该算法将问题分为子问题,并加以解决。 这是一种搜索算法,这意味着它可用于查找整数数组中的数字或目录中的项目。

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

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


2.编写程序以实现线性搜索算法? 解决方案
它甚至比二进制搜索更容易,您所需要做的就是使用for循环或递归方法遍历数组中的所有元素,然后将每个元素与要搜索的元素进行比较。 当元素匹配时,根据您的要求返回index或true / false。

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

顺便说一句,如果您在计算和理解算法的时间和空间复杂性时遇到麻烦,那么应该在参加面试之前先看一门类似“ 数据结构与算法—面试”的课程,以更好地理解它们。


3.是否可以实现没有递归的二进制搜索算法? 解决方案
您可能知道,可以通过使用循环,有时甚至使用Stack数据结构,将递归算法替换为迭代算法。 对于二进制搜索,您也可以执行此操作,只需将数组划分并比较中间元素,直到找到目标元素或数组中没有其他元素为止。

如果目标元素大于中间元素,则必须向右移动,否则向左移动。

顺便说一句,如果您在理解递归算法或将递归算法转换为迭代算法时遇到困难,那么我建议您学习一门不错的在线课程,例如算法和数据结构-第1部分 Pluralsight的第2部分将更好地学习基础知识。

这些课程还将教您如何计算时间和空间复杂度,这从“编码面试”的角度以及提高算法的性能都非常重要。

5.实现冒泡排序算法? 解决方案
这不是您学习的第一个排序算法吗? 好吧,我做到了,这就是为什么我记得气泡排序是关于将数组中的每个数字与其他数字进行比较,以便在每次传递最大或最小元素之后,气泡一直上升到顶部。

我的意思是数字已找到它的排序顺序。 这是基本的排序算法之一,我们大多数人开始学习使用此算法进行排序。

它的时间复杂度为O(n ^ 2),这使得它无法用于大量数字,但对于少量数字却表现出色。

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

而且,如果您真的很想做得好,也可以查看此课程列表来破解您的编程工作面试

10种数据结构,算法和SQL课程可破解任何编程工作面试

6.稳定和不稳定排序算法之间的区别? 回答
这是一个棘手的概念,直到很久以前我才知道。 我还没有遇到过这种情况的任何实际用例,但只是从访谈的角度知道这个概念还可以。

在稳定的排序算法中,即使在排序后,相同元素的顺序也保持不变,但是在不稳定的排序算法中,这会发生变化。

一个很好的例子是快速排序合并 排序 ,其中前者是不稳定的,而后者是稳定的算法。


7.什么是二叉树的深度优先搜索算法? (解)
这是另一种流行的搜索算法,主要用于树和图形。 该算法首先在相同级别搜索之前先深入访问节点,这就是为什么使用深度优先搜索算法的原因。

实施起来很棘手,但是您可以使用Stack来实现DFS或深度优先搜索算法。 如果您需要有关此主题的更多信息,建议您阅读Aditya Bhargava的《 Grokking算法》一书,他的解释可能是该主题的最佳解释。

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


9.如何实现计数排序算法? 解决方案
就像我们对其他O(n)排序算法(例如Radix排序和Bucket排序)所做的一样。

如果您不知道Counting sort是另一种整数排序算法,则可以根据较小整数的键对对象集合进行排序。

它具有O(n)时间复杂度,因此对于一组特定的输入而言,它比QuicksortMergesort更快。 有关更多详细信息,请参见解决方案。

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排序是一种非比较排序算法 ,该算法通过按共享相同有效位和值的单个数字对键进行分组,对带有整数键的数据进行排序

您可以进一步查看算法,第一部分第二部分 由Robert Sedgewick在Coursera上了解有关这些O(n)或线性排序算法的更多信息。 该课程是免费的学习和探索课程,但如果您还想获得认证,则需要付费。

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是一种分而治之的算法 ,这意味着您可以保持数组划分,也称为partitioning 。 然后,您可以在最小级别上解决问题,也称为基本案例,例如您的数组仅包含一个或零个元素时。


19,比较和非比较排序算法之间的区别? 回答
顾名思义,在基于比较的排序算法中,必须像快速排序那样对元素进行排序,但是在诸如Counting sort这样的非基于比较的排序算法中,可以不对元素进行比较。 惊讶吗

好吧,那么,我建议您阅读本课程,以了解有关O(n)排序算法的更多信息,例如基数排序,计数排序和存储桶排序。 您可以进一步看到 数据结构和算法:如果您想进一步了解这些O(n)排序算法,请进行深入研究

数据结构和算法:使用Java进行深入研究

19.如何检查两个String是否相互旋转? 解决方案
有一个简单的技巧可以解决此问题, 只需将String与自身连接起来,然后检查旋转是否存在。 您可以使用indexOf或substring方法来实现。 如果串联的String包含旋转,则给定的String是前者的旋转。


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

我希望这20个问题足以让您继续进行编码算法面试的准备。 如果您需要更多此类编码问题,可以从Gayle Laakmann McDowell 的《 Cracking The Code Interview》一书中寻求帮助,该书包含189多个编程问题和解决方案。 一本好书,可以在短时间内为编程面试做好准备。

顺便说一句,您在实践中解决的问题越多,您的准备就会越好。 因此,如果您认为此问题列表不够用,并且还需要更多,请查看其他50个编程问题以进行电话采访以及这些书籍课程,以进行更全面的准备。

现在您已准备好进行编码面试

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

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

您需要了解这些常见的编码, 数据结构和算法问题 ,才能成功采访任何规模的编程公司的大小公司。

如果您正在寻找编程或软件开发工作,则可以从此编码问题列表开始进行准备。

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

良好的数据结构和算法知识对于成功进行访谈采访至关重要,因此您应该集中精力进行访谈。

准备面试的资源
  1. 破解代码面试盖尔·拉克曼·麦克道威尔Gayle Laakmann McDowell)
  2. 数据结构和算法:使用Java进行深入研究
  3. 从0到1:Java中的数据结构和算法
  4. 数据结构和算法分析—求职面试
您可能喜欢的其他文章:

结束语

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

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

PS —如果您需要一些免费资源,则可以查看此免费数据结构和算法课程列表 开始准备。

From: https://hackernoon.com/top-20-searching-and-sorting-algorithms-interview-questions-5a476121fd0f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值