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

程序员面试算法

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

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

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

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

有时,如果使用的数据结构类似于我在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)时间复杂度,使其比喜欢的速度更快 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排序是一种非比较排序算法 ,该算法通过按共享相同有效位和值的单个数字对键进行分组,从而使用整数键对数据进行排序 。 您可以进一步查看该解决方案以了解实施细节。

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

程序员面试算法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值