外贸公司网站设计哪家好,网站制作流程视频教程,公司logo效果图,安徽建设工程信息网官网优秀中项网程序员必备的50道数据结构和算法面试题
在本文中#xff0c;将分享一些常见的编程面试问题#xff0c;这些问题来自于不同经验水平的程序员#xff0c;囊括从刚大学毕业的人到具有一到两年经验的程序员。
编码面试主要包括数据结构和基于算法的问题#xff0c;以及一些诸…程序员必备的50道数据结构和算法面试题
在本文中将分享一些常见的编程面试问题这些问题来自于不同经验水平的程序员囊括从刚大学毕业的人到具有一到两年经验的程序员。
编码面试主要包括数据结构和基于算法的问题以及一些诸如如何在不使用临时变量的情况下交换两个整数这样的逻辑问题
我认为将编程面试问题划分到不同的主题区域是很有帮助的。我在面试中经常看到的主题区域是数组、链表、字符串、二叉树以及源于算法的问题例如字符串算法排序算法如 quicksort 或基数排序以及其他杂项这就是你能在这篇文章中找到主要内容。
我们无法保证你会被问及这些编程或数据结构和算法问题但它们会让你充分了解在实际编程工作面试中可预期的各类问题。
一旦你知道了这些问题你应该有足够的信心参加任何电话或面对面的面试。顺便说一句如果你对基本的数据结构和算法没有足够了解或者你多年未接触相关知识那么尝试这些问题毫无意义。
闲言少叙下面就是我给出的程序类面试中最常问到的问题清单
数组问题
数组是最常用的基础数据结构它将元素保存在连续的内存中。它也是面试最喜欢的问题之一在代码面试中你会经常听到很多关于数组的问题例如数组的反转、数组的排序或者查找数组中的一个元素。
数组结构的一个关键优点是在知道索引的情况能够以 O(1) 的复杂度找到一个元素。但是增加或者删除一个元素是很慢的因为一旦创建了一个数组你就不能改变它的大小了。
为了创建一个更长或者更短的数组你需要创建一个新的数组然后将所有元素从旧数组中复制到新数组中。
解决数组问题的关键是你要对数组这种数据结构有一个深刻的认识同时还要了解基本的程序流程如循环、递归以及基本的操作符。
下面是一些经常问到和数组相关的面试题你可以拿来练习
1、在一个给定的从1到100的整型数组中如何快速找到缺失的数字
2、如何找到一个给定的整型数组中的重复数字
3、在一个未排序的整型数组中如何找到最大和最小的数字
4、在一个整型数组中如何找到一个所有成对的数字满足它们的和等于一个给定的数字
5、如果一个数组包含多个重复元素如何找到这些重复的数字
6、用 Java 实现从一个给定数组中删除重复元素
7、如何利用快速排序对一个整型数组进行排序
8、如何从一个数组中删除重复元素
9、用 Java 实现数组反转
10、如何不借助库实现从数组中删除重复元素
链表问题
链表是另外一个常见的数据结构对数组结构是一个补充。和数组类似它也是一个线性的数据结构以线性方式存储元素。
不过和数组不同的是链表的元素不是存储在连续位置中而是分散在各个内存中的各个位置通过节点链接起来。一个链表就是一个包含了下个节点内存地址的节点列表。
基于这种结构可以很容易实现链表中元素的添加和删除因为只需要改变节点的指向而无需创建一个新的数组。不过链表中的查找是相对困难的在一个单向链表中需要花费 O(n) 的时间代价来查找一个元素。
链表有几种不同的形式。首先是单向链表在这个结构你只能向一个方向遍历向前或者反转其次是双向链表你可以双向遍历向前或者向后最后是环形链表组成一个环的形式。
要解决链表问题你就必须了解递归的相关知识因为链表是一种递归的数据结构。如果你从链表中去掉一个节点, 剩下的数据结构仍然是链表因此, 许多链表问题有比遍历更简单的递归解决方案.
下面是一些最常见和流行的链表面试问题
1、在一次遍历中怎样发现单个链表的中间元素?
2、怎样验证给定的链表是环形的? 怎样发现这个环的起始节点?
3、怎样翻转链表?
4、不使用递归怎样反转单个链表?
5、在未排序链表中怎样移除重复的节点?
6、怎样找出单个链表的长度?
7、从单个链表的结尾处怎样找出链表的第三个节点?
8、怎样使用栈计算两个链表的和?
字符串相关问题
与数组和链表数据结构一起字符串是编程工作面试中的另一个热门话题。我从未参加过没有问过基于字符串相关问题的编码面试。
字符串的一个优势在于如果你了解数组你可以很容易地解决基于字符串的问题因为字符串仅仅是一个字符数组。
因此在解决基于数组的编程问题中所学到的所有技术也可用于解决字符串编程问题。
以下是编程求职面试中常见的字符串编程问题
1、如何输出字符串中的重复字符
2、如何判断两个字符串是否互为回文
3、如何从字符串中输出第一个不重复字符
4、如何使用递归实现字符串反转?
5、如何检查字符仅包含数字字符
6、如何在字符串中找到重复字符
7、如何对给定字符串中的元音及辅音进行计数
8、如何计算给定字符传中特定字符出现的次数
9、如何找到一个字符串的全排列
10、在不使用任何库方法的情况下如何反转给定语句中的单词
11、如何判断两个字符串是否互为旋转
12、如何判断给定字符串是否是回文
二叉树问题
到目前为止我们只研究了线性数据结构但现实世界中的所有信息无法全部使用线性方式表示而这正是树数据结构所擅长的地方。
树是一种支持以分层方式存储数据的数据结构。根据你存储数据的方式有不同类型的树例如二叉树其中每个节点最多有两个子节点。
与它的近亲二叉搜索树一起它们也是最流行的树数据结构之一。因此你会发现很多基于它们的问题例如如何遍历它们、计算节点数、查找深度以及检查它们是否平衡。
解决二叉树问题的一个关键点是对其理论的深刻理解例如什么是二叉树的大小或深度什么是叶节点什么是节点以及对流行的遍历算法的理解例如前序、后序和中序遍历。
下面是一些经常问到的基于二叉树的面试题你可以拿来练习
1、二叉搜索树是如何实现的
2、如何在给定二叉树上实现前序遍历
3、不使用递归如何按照前序遍历给定二叉树
4、如何在给定二叉树上实现中序遍历
5、不使用递归情况下如何使用中序遍历输出给定二叉树所有节点
6、如何实现后序遍历算法
7、如何不使用递归实现二叉树的后续遍历
8、如何输出二叉搜索树的所有叶节点
9、如何在给定二叉树中计算叶节点数目
10、如何在给定数组中执行二分搜索
编程面试问题之杂项
除了基于数据结构的问题之外大多数编程工作面试还会询问算法、设计、位操作和基于逻辑的常规问题我将在本节中对其进行介绍。
练习这些概念很重要因为有时在实际面试中解决这些概念很棘手。提前练习它们不仅能让你熟悉它们而且还让你更自信地向面试官解释其解决方案。
1、冒泡排序是如何实现的?
2、迭代式快排算法是如何实现的
3、你如何实现插入排序算法
4、合并排序算法是如何实现的
5、桶排序算法是如何实现的
6、计数排序算法是如何实现的
7、基数排序算法是如何实现的
8、在不使用第三个变量的前提下如何交换两个数
9、如何检查两个矩形是否重叠
10、如何设计一个自动售货机
以上这些是数据结构和算法之外的一些最常见的面试问题可以帮助你在面试中做得很好。