Java和Python的算法和数据结构面试问题
有很多计算机科学专业毕业生和程序员在Uber和Netflix等公司申请编程,编码和软件开发职位。亚马逊,微软和谷歌等大型组织; 和Infosys或Luxsoft等基于服务的公司。但是,当你申请这些公司的工作时,他们中的许多人都不知道会有什么样的编程面试问题。
在本文中,我将分享一些常见问题的算法和数据结构面试问题,这些问题来自不同层次经验的程序员,从刚从大学毕业的人到具有一到两年经验的程序员。
编码访谈主要包括数据结构和基于算法的问题以及一些逻辑问题,例如“如何在不使用临时变量的情况下交换两个整数?”
我认为将编码面试问题划分到不同的主题领域是有帮助的。我在访谈中经常看到的主题领域是数组,链表,字符串,二叉树,以及来自算法的问题(例如字符串算法,排序算法,如quicksort或radix排序,以及其他杂项),这就是什么你会在这篇文章中找到。
我们无法保证会向您询问这些编码或数据结构和算法问题,但它们会让您充分了解在实际编程工作面试中可能遇到的各种问题。
一旦你完成了这些问题,你应该有足够的信心参加任何面试。
顺便说一下,如果你没有足够的基本数据结构和算法知识,或者你没有多年触及它们,那么尝试这些问题毫无意义。
在这种情况下,你应该采用像算法和数据结构第1部分和第2部分这样的好的课程作者Robert Horvick来刷新你的DS和算法技能。
前50个算法和编程面试问题
没有任何进一步的麻烦,这里是我的编程工作面试中一些最常见的编码面试问题列表。我还为Java中的大多数问题共享了解决方案,但如果您是Python开发人员,则可以检查Python中的逻辑和实现。你也可以谷歌找到大多数问题的答案,因为它们很常见。
1.数组编码面试问题
数组是最基本的数据结构,它将元素存储在连续的内存位置。这也是采访者的一个主要话题,你会在任何编码访谈中听到很多关于数组的问题,例如反转数组,排序数组或搜索数组中的元素。
数组数据结构的主要优点是,如果您知道索引,它会提供快速的O(1)搜索,但是从数组中添加和删除元素的速度很慢,因为一旦创建了数组,就无法更改数组的大小。
要创建更短或更长的数组,您需要创建一个新数组并将所有元素从旧复制到新。
解决基于数组的问题的关键是熟悉 数组数据结构以及基本编程结构,如循环,递归和基本运算符。
以下是一些流行的基于数组的编码面试问题供您练习:
- 如何在给定的1到100的整数数组中找到缺失的数字?(解决方案)
- 如何在给定的整数数组上找到重复的数字?(解决方案)
- 如何在未排序的整数数组中找到最大和最小的数字?(解决方案)
- 你如何找到所有对的整数数组,其总和等于给定的数字?(解决方案)
- 如果数组包含多个重复项,如何在数组中找到重复的数字?(解决方案)
- 如何从Java中的给定数组中删除重复项?(解决方案)
- 如何使用quicksort算法对整数数组进行排序?(解决方案)
- 如何从阵列中删除重复项?(解决方案)
- 你如何在Java中反转数组?(解决方案)
- 如何在不使用任何库的情况下从数组中删除重复项?(解决方案)
这些问题不仅可以帮助您提高解决问题的能力,还可以提高您对阵列数据结构的了解。
如果您需要基于阵列的更高级的问题,那么您还可以看到编码面试训练营:算法+数据结构,算法的训练营风格课程,专门用于面试准备,以获得谷歌,微软,苹果等科技巨头的工作,Facebook等。
而且,如果您觉得10个问题还不够,而且您需要更多练习,那么您还可以查看30个阵列问题列表。
2.链接列表编程面试问题
甲链表是另一个常见的数据结构,它补充了阵列。与数组类似,它也是线性数据结构,并以线性方式存储元素。
但是,与数组不同,它不会将它们存储在连续的位置; 相反,它们分散在内存中,并使用节点相互连接。
链表是节点列表,其中每个节点包含存储的值和下一个节点的地址。
由于这种结构,在链表中添加和删除元素很容易,因为您只需要更改链接而不是创建数组,但搜索很困难,并且通常需要花费O(n)时间来查找元素。单链表。
此文章提供了在阵列和链表数据结构之间的区别的详细信息。
它还有各种类似链表,可以让你在一个方向上移动(向前或向后); 双向链表,允许您双向移动(向前和向后); 最后,圆形链表,形成一个圆圈。
为了解决基于链表的问题,良好的递归知识很重要,因为链表是递归数据结构。
如果从链接列表中获取一个节点,则剩余的数据结构仍然是链接列表,因此,许多链接列表问题具有比迭代解决方案更简单的递归解决方案。
以下是一些最常见和最受欢迎的链接列表面试问题及其解决方案:
- 如何在一次通过中找到单链表的中间元素?(解决方案)
- 如何检查给定链表是否包含循环?你如何找到循环的起始节点?(解决方案)
- 你如何扭转链表?(解决方案)
- 如何在没有递归的情况下反转单链表?(解决方案)
- 如何在未排序的链表中删除重复节点?(解决方案)
- 你如何找到单链表的长度?(解决方案)
- 如何在单链表中找到最后的第三个节点?(解决方案)
- 如何使用Stack找到两个链表的总和?(解决方案)
这些问题将帮助您提高解决问题的能力,并提高您对链表数据结构的了解。
如果您在解决这些链表编码问题时遇到问题,那么我建议您通过数据结构和算法:深入使用Java课程来刷新您的数据结构和算法技能。
您还可以查看30个链接列表面试问题列表, 了解更多练习题。
3.字符串编码面试问题
与数组和链表数据结构一起,字符串是编程工作访谈的另一个热门话题。我从未参加过编码面试,其中没有提出基于字符串的问题。
字符串的一个好处是,如果你知道数组,你可以很容易地解决基于字符串的问题,因为字符串只是一个字符数组。
因此,通过求解基于数组的编码问题所学到的所有技术也可用于解决字符串编程问题。
以下是编程求职面试中常见的字符串编码问题列表:
- 如何从字符串中打印重复的字符?(解决方案)
- 你如何检查两个字符串是否是彼此的字谜?(解决方案)
- 如何从字符串中打印第一个不重复的字符?(解决方案)
- 如何使用递归来反转给定的字符串?(解决方案)
- 如何检查字符串是否只包含数字?(解决方案)
- 如何在字符串中找到重复的字符?(解决方案)
- 你如何计算给定字符串中的元音和辅音?(解决方案)
- 如何计算字符串中给定字符的出现次数?(解决方案)
- 你如何找到字符串的所有排列?(解决方案)
- 如何在不使用任何库方法的情况下反转给定句子中的单词?(解决方案)
- 你如何检查两个字符串是否相互旋转?(解决方案)
- 你如何检查给定的字符串是否是回文?(解决方案)
这些问题有助于提高您对字符串作为数据结构的了解。如果您可以在没有任何帮助的情况下解决所有这些字符串问题,那么您的状态良好
对于更高级的问题,我建议你解决Steven Skiena在算法设计手册中给出的问题,这是一本有最棘手的算法问题的书。
如果您需要更多练习,这里是另一个20个字符串编码问题的列表 。
4.二叉树编码面试问题
到目前为止,我们只研究了线性数据结构,但现实世界中的所有信息都无法以线性方式表示,而这正是树数据结构所帮助的地方。
树数据结构是一种数据结构,允许您以分层方式存储数据。根据您存储数据的方式,有不同类型的树,例如二叉树,其中每个节点最多具有两个子节点。
除了它的近亲 二叉搜索树,它也是最流行的树数据结构之一。因此,您会发现很多基于它们的问题,例如如何遍历它们,计算节点,查找深度,以及检查它们是否平衡。
解决二叉树问题的一个关键点是对理论的强烈了解,例如二叉树的大小或深度,叶子是什么,节点是什么,以及对流行的遍历算法的理解,例如前,后和有序遍历。
以下是软件工程师或开发人员访谈中流行的基于二叉树的编码问题列表:
- 如何实现二叉搜索树?(解决方案)
- 如何在给定的二叉树中执行前序遍历?(解决方案)
- 如何在没有递归的情况下按预先遍历给定的二叉树?(解决方案)
- 如何在给定的二叉树中执行有序遍历?(解决方案)
- 如何在没有递归的情况下使用inorder遍历打印给定二叉树的所有节点?(解决方案)
- 你如何实现一个后序遍历算法?(解决方案)
- 如何在没有递归的情况下遍历后序遍历中的二叉树?(解决方案)
- 如何打印二叉搜索树的所有叶子?(解决方案)
- 如何计算给定二叉树中的多个叶节点?(解决方案)
- 如何在给定数组中执行二进制搜索?(解决方案)
如果你觉得你对二叉树编码的理解不充分并且你不能自己解决这些问题,我建议你回过头来选择一个好的数据结构和算法课程,如从0到1:Java中的数据结构和算法。
如果您需要更多建议,请参阅我的有用数据结构算法书籍和课程列表。
5.杂项编码面试问题
除了基于数据结构的问题之外,大多数编程工作访谈还会询问算法,设计,位操作和基于逻辑的一般问题,我将在本节中对其进行描述。
练习这些概念很重要,因为有时在实际的面试中解决这些概念很棘手。
之前练习它们不仅让你熟悉它们,而且让你更有信心向面试官解释解决方案。
- 如何实现冒泡排序算法?(解决方案)
- 如何实现迭代快速排序算法?(解决方案)
- 你如何实现插入排序算法?(解决方案)
- 如何实现合并排序算法?(解决方案)
- 如何实现桶排序算法?(解决方案)
- 你如何实现计数排序算法?(解决方案)
- 如何实现基数排序算法?(解决方案)
- 如何在不使用第三个变量的情况下交换两个数字?(解决方案)
- 如何检查两个矩形是否相互重叠?(解决方案)
- 你如何设计自动售货机?(解决方案)
如果你需要更多这样的编码问题,你可以从像Cracking The Code Interview这样的书籍中获取帮助,由Gayle Laakmann McDowell提供189+编程问题和解决方案。一本好书,可以在短时间内编写求职面试。
顺便说一下,你在实践中解决的问题越多,你的准备就越好。因此,如果您认为50还不够而且您需要更多,那么请查看这些额外的50个编程问题,以便进行电话访谈以及这些书籍和课程,以便进行更全面的准备。
现在,您已准备好进行编码面试
这些是一些最常见的问题,可以帮助您在面试中做得很好。
我也在我的博客上分享了很多这些问题,所以如果你真的很感兴趣,你可以随时去那里搜索它们。
这些常见的编码,数据结构和算法问题是您在任何级别的编程工作中成功访问任何公司(大或小)时需要了解的问题。
如果您正在寻找2018年的编程或软件开发工作,您可以使用此编码问题列表开始准备。
此列表提供了准备的好主题,也有助于评估您的准备工作,以找出您的优势和劣势领域。