来自编码访谈的20多个基本算法问题

披露:此帖子包括联盟链接;如果您从本文提供的不同链接购买产品或服务,我可能会收到赔偿。

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

但是,是的,当你在寻找第一份工作时,这是初学者级别中最难的。

这就是为什么你不能轻易抓住机会的原因。你必须准备抓住这个机会,为此,你必须知道在面试中你期待的。问什么,你应该准备什么主题,等等?

我在博客中写了很多关于你可以在这个博客中找到有用的文章的内容,但回顾一下,让我告诉你除了数据结构问题,系统设计问题和编程语言特定的问题,如Java,C ++或Scala,大多数编程求职面试也会询问基于算法的问题。

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

练习这些基于算法的问题非常重要,因为即使它们看起来很明显也很容易,但有时候在实际的面试中解决它们会变得很棘手,特别是如果你从未自己编写过它们。

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

它还可以让您为任何扭曲的问题和替代问题做好准备,例如面试官经常会要求您使用递归或迭代来解决特定的编码问题。

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

顺便说一句,如果你是数据结构和算法领域的初学者,那么我建议你首先通过一个全面的算法价格,如数据结构和算法:在Udemy上使用Java深度潜水,这不仅会教你基本的数据结构和算法,以及如何在现实世界中使用它们以及如何使用它们解决编码问题。

另一方面,如果您喜欢阅读书籍或喜欢在线价格的书籍,那么您必须阅读一本综合性的书籍,例如Thomas H. Cormen的“算法入门”,以了解常见的计算机科学算法,如搜索,排序,密码学,图形算法和一些常见的算法,如傅立叶变换。

面向程序员的20个基本算法面试问题

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

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

你能实现二进制搜索算法吗? (解)
这很容易,二分搜索是一种除法和征服算法,其中问题分为子问题和解决问题。它是一种搜索算法,这意味着它用于查找整数数组中的数字或目录中的项目。

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

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

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

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

顺便说一句,如果您在计算和理解算法的时间和空间复杂性时遇到困难,那么您应该看一下像数据结构和算法—面试这样的价格,以便在面试之前更好地理解它们。

3.你能实现没有递归的二进制搜索算法吗? (解)
您可能知道可以使用循环并有时使用堆栈数据结构将递归算法替换为迭代算法。对于二进制搜索,您也可以这样做,只需分割数组并比较中间元素,直到找到目标元素或者没有更多元素进入数组。

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

顺便说一句,如果您无法理解递归算法或将递归算法转换为迭代算法,那么我建议您通过一个很好的在线价格,如算法和数据结构— Pluralsight的第1部分和第2部分,以更好地学习基础知识。

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

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

我的意思是这个数字已经发现它被放置在排序顺序中。这是基本的排序算法之一,我们大多数人开始学习使用这种算法进行排序。

时间的复杂性是 O(n ^2) 这使得它无法用于大量数字,但它适用于一小组数字。

5.编写代码以在二叉树中实现级别订单搜索? (解)
在级别顺序搜索中,您首先访问兄弟节点,而不是进入下一级别。您可以使用队列在二叉树中实现级别顺序搜索。如果您想了解更多,可以在freeCodeCamp上查看任何这些免费的数据结构和算法价格

而且,如果你真的认真做得好,你也可以查看这个价格列表来破解你的编程工作面试

6.稳定和不稳定的排序算法之间的区别? (回答)
这是一个棘手的概念,直到很久以前我才知道。我还没有遇到任何这个实际用例,但只是从面试的角度来看这个概念是好的。

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

一个很好的例子是quicksort和mergesort,其中前者是不稳定的,而后来是一个稳定的算法。

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

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

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

9.如何实现计数排序算法? (解)
就像我们使用其他O(n)排序算法(如Radix sort和Bucket sort)一样。

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

它有 O(n) 时间复杂度使得它比Quicksort和Mergesort对特定输入集更快。有关详细信息,请参阅解决方案

10.如何在不使用第三个变量的情况下交易所两个数字? (解)
另一个棘手的问题,如果你知道诀窍很容易:-)那么你可以交易所两个数字而不使用临时或第三个变量,如果你可以将数字的总和存储在一个数字中然后减去与其他数字之和的总和

a = 3;
b = 5;

a = a + b; //8
b = a --- b; // 3
a = a --- b; //5

现在你有一个= 5和b = 3,所以在不使用第三个或临时变量的情况下交易所数字。

11.如何实现基数排序算法? (解)
这是另一种具有O(n)时间复杂度的整数排序算法。根据维基百科,Radix sort是一种非比较排序算法,它通过将密钥按照共享相同重要位置和值的各个数字对密钥进行分组来对整数密钥进行排序。

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

12.如何实现插入排序算法? (解)
你有没有在你的橱柜里安排一副纸牌或衬衫?这两件事之间有什么共同之处?好吧,你把下一张卡片或衬衫放到合适的位置,或者,我应该说你将下一个元素插入正确的位置。那是你的插入排序。

13.写算法检查两个矩形是否相互重叠? (解)
这是一个棘手的算法问题,但如果您必须在2D Maths价格中听老师的话,那么您可以解决这个问题。还有另一个技巧,检查矩形不重叠的所有条件,如果任何条件为假,则意味着两个矩形相互重叠。例如,如果一个矩形的上侧低于其他矩形的下侧,则它们不会重叠,因为它们是垂直对齐的。

14.如何实现合并排序算法? (解)
与Quicksort类似,合并排序也是一种分而治之的算法,这意味着您可以将问题分开,直到您可以对最小的问题进行排序。

例如,为了对数组进行排序,您可以将数组划分为更小的部分,直到您知道如何对它们进行排序,就像已经对一个或零个元素的数组进行排序一样。对小数组进行排序后,将它们合并以获得最终结果。

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

另一个值得注意的是,即使两者都有 O(NLogN) 平均时间,使用quicksort比使用mergesort更好,因为Quicksort在相同数量的输入上花费的时间更少,Quicksort中的常数因子比合并排序更少。

15.如何实现桶排序算法? (解)
Bucket sort是另一种非常棒的算法,它可以对数组进行排序,甚至不需要比较元素。

它被称为非比较排序算法,可以为所选输入提供O(n)性能。

如果您不了解基于非比较的排序算法,请参阅算法简介一书。

16.编写算法以检查两个字符串是否为Anagram(解决方案)
anagram是长度和角色匹配但不是顺序的东西 ArmyMary,两者都有相同的字符数。

一个技巧是解决这个问题是对字符数组进行排序并检查它们是否相同。

17.用您喜爱的编程语言实现QuickSort算法? (解)
这是一个非常简单的排序算法,但只有你练习了,如果没有,那么你可能会迷失方向。请记住,Quicksort是一种分而治之的算法,这意味着你可以继续划分数组,也称为分区。然后在最小级别解决问题,也称为基本情况,例如当数组只包含一个或零个元素时。

19,比较和非比较排序算法之间的区别? (回答)
顾名思义,在基于比较的排序算法中,您必须将元素与快速排序进行排序,但在基于非比较的排序算法(如计数排序)中,您可以对元素进行排序而不进行比较。惊讶吗?

是的,那么我建议你查看这门价格以了解更多信息 O(n) 排序算法,如Radix Sort,Counting Sort和Bucket Sort。如果您想了解更多相关信息,可以进一步查看数据结构和算法:深度潜水 O(n) 排序算法。

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. 数据结构和算法分析—求职面试

结算笔记

谢谢,你完成了文章的最后…祝你的编程面试好运这肯定不容易,但通过遵循这种搜索和排序算法问题,你比其他人更近一步。

如果您喜欢这篇文章,那么请与您的朋友和同事分享,不要忘记在Twitter上关注javarevisited

您可能喜欢的其他编程文章:

  • 10本书准备技术规划/编码工作面试
  • 每个程序员都应阅读的10本算法书籍
  • 面向Java开发人员的五大数据结构和算法书籍
  • 我最喜欢的免费价格,深入学习算法
  • Java开发人员的10个免费数据结构价格
  • 破解编程工作访谈的价格列表
  • 10破解编码面试的数据结构,算法和SQL价格

附: —如果您需要一些免费资源,可以查看这个免费数据结构和算法价格列表,开始准备。

资讯来源:由0x资讯编译自DEV,原文:https://dev.to/javinpaul/20-basic-algorithms-problems-from-coding-interviews-4o76 ,版权归作者所有,未经许可,不得转载
你可能还喜欢