Java算法和数据结构面试问题

4 篇文章 0 订阅
4 篇文章 0 订阅

1.数组面试问题

数组是最基本的数据结构,它将元素存储在连续的内存位置。这也是采访者的一个主要话题,你会在任何编码访谈中听到很多关于数组的问题,例如反转数组,排序数组或搜索数组中的元素。

  1. 如何在给定的1到100的整数数组中找到缺失的数字?
  2. 如何在给定的整数数组上找到重复的数字?
  3. 如何在未排序的整数数组中找到最大和最小的数字?
  4. 你如何找到所有对的整数数组,其总和等于给定的数字?
  5. 如果数组包含多个重复项,如何在数组中找到重复的数字?
  6. 如何从Java中的给定数组中删除重复项?
  7. 如何使用快速排序算法对整数数组进行排序?
  8. 如何从阵列中删除重复项?
  9. 你如何在Java中反转数组?
  10. 如何在不使用任何库的情况下从数组中删除重复项?

2.链表面试问题

链表是节点列表,其中每个节点包含存储的值和下一个节点的地址。

由于这种结构,在链表中添加和删除元素很容易,因为您只需要更改链接而不是创建数组,但搜索很困难,并且通常需要花费O(n)时间来查找元素。单链表。

它还有各种类似链表,可以让你在一个方向上移动(向前或向后); 双向链表,允许您双向移动(向前和向后); 最后,圆形链表,形成一个圆圈。

为了解决基于链表的问题,良好的递归知识很重要,因为链表是递归数据结构。

如果从链接列表中获取一个节点,则剩余的数据结构仍然是链接列表,因此,许多链接列表问题具有比迭代解决方案更简单的递归解决方案。

  1. 如何在一次通过中找到单链表的中间元素?
  2. 如何检查给定链表是否包含循环?你如何找到循环的起始节点?
  3. 你如何扭转链表?
  4. 如何在没有递归的情况下反转单链表?
  5. 如何在未排序的链表中删除重复节点?
  6. 你如何找到单链表的长度?
  7. 如何在单链表中找到最后的第三个节点?
  8. 如何使用Stack找到两个链表的总和?

3.字符串面试问题

与数组和链表数据结构一起,字符串是编程工作访谈的另一个热门话题。

字符串的一个好处是,如果你知道数组,你可以很容易地解决基于字符串的问题,因为字符串只是一个字符数组。因此,通过求解基于数组的编码问题所学到的所有技术也可用于解决字符串编程问题。

  1. 如何从字符串中打印重复的字符?
  2. 你如何检查两个字符串是否是彼此的字谜?
  3. 如何从字符串中打印第一个不重复的字符?
  4. 如何使用递归来反转给定的字符串?
  5. 如何检查字符串是否只包含数字?
  6. 如何在字符串中找到重复的字符?
  7. 你如何计算给定字符串中的元音和辅音?
  8. 如何计算字符串中给定字符的出现次数?
  9. 你如何找到字符串的所有排列?
  10. 如何在不使用任何库方法的情况下反转给定句子中的单词?
  11. 你如何检查两个字符串是否相互旋转?
  12. 你如何检查给定的字符串是否是回文?

4.二叉树面试问题

到目前为止,我们只研究了线性数据结构,但现实世界中的所有信息都无法以线性方式表示,而这正是树数据结构所帮助的地方。

树数据结构是一种数据结构,允许您以分层方式存储数据。根据您存储数据的方式,有不同类型的树,例如二叉树,其中每个节点最多具有两个子节点。

除了它的近亲 二叉搜索树,它也是最流行的树数据结构之一。因此,您会发现很多基于它们的问题,例如如何遍历它们,计算节点,查找深度,以及检查它们是否平衡。

解决二叉树问题的一个关键点是对理论的强烈了解,例如二叉树的大小或深度,叶子是什么,节点是什么,以及对流行的遍历算法的理解,例如前,后和有序遍历。

  1. 如何实现二叉搜索树?
  2. 如何在给定的二叉树中执行前序遍历?
  3. 如何在没有递归的情况下按预先遍历给定的二叉树?
  4. 如何在给定的二叉树中执行有序遍历?
  5. 如何在没有递归的情况下使用inorder遍历打印给定二叉树的所有节点?
  6. 你如何实现一个后序遍历算法?
  7. 如何在没有递归的情况下遍历后序遍历中的二叉树?
  8. 如何打印二叉搜索树的所有叶子?
  9. 如何计算给定二叉树中的多个叶节点?
  10. 如何在给定数组中执行二进制搜索?

5.其他面试问题

除了基于数据结构的问题之外,大多数编程工作访谈还会询问算法,设计,位操作和基于逻辑的一般问题,我将在本节中对其进行描述。

练习这些概念很重要,因为有时在实际的面试中解决这些概念很棘手。

  1. 如何实现冒泡排序算法?
  2. 如何实现迭代快速排序算法?
  3. 你如何实现插入排序算法?
  4. 如何实现合并排序算法?
  5. 如何实现桶排序算法?
  6. 你如何实现计数排序算法?
  7. 如何实现基数排序算法?
  8. 如何在不使用第三个变量的情况下交换两个数字?
  9. 如何检查两个矩形是否相互重叠?
  10. 你如何设计自动售货机?
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值