作者 | javinpaul

编译 | 王天宇、Jane

整理 | Jane

【导读】之前我们给同学们推荐了很多关于 Python 的面试资源,大家都表示很有用。这次营长表示要翻 Java 的牌子啦~ 应大家的强烈反馈,我们找了一套 Java 语言的算法和编程的面试题。

这份面试资源主要包含五部分内容:数组、链表、字符串、二叉树和重要算法(如排序算法)的编程面试题,其中每部分内容我们都列出了一些最常被问到的热门问题,并且在每个题目后给出了可以参考的解决思路和代码,因为题目较多,我们没有罗列所有的方法和代码,只给出了访问地址。相信大家在掌握了这些内容后,一定可以提升实力、信心大增。

数组

数组,将元素存储到内存的连续位置中,是最基本的数据结构。在任何和编程相关的面试中,都会被问到和数组相关的问题,可以说是非常热门的考题之一。比如:将数组反转、对数组进行排序、搜索数组中的元素等。

数组数据结构的主要优点是如果知道索引就可以通过 O(l) 进行快速搜索,但是在数组中添加和删除元素的速度会很慢,因为数组一旦被创建,就无法更改其大小。如果需要创建更长或更短的数组,得先创建一个新数组,再把原数组中的所有元素复制到新创建的数组中。

解决数组相关问题的关键是要熟悉数组的数据结构和基本的构造,如循环、递归等等;下面给出了 10 道热门面试题帮助大家掌握知识并进行练习。

1.给定一个 1-100 的整数数组,请找到其中缺少的数字。

解决方法与代码:

https://javarevisited.blogspot.com/2014/11/how-to-find-missing-number-on-integer-array-java.html

2.请在给出的整数数组中找到重复的数字。

解决方法与代码:

http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

3.如何在未排序的整数数组中找到最大值与最小值?

解决方法与代码:

http://java67.blogspot.com/2014/02/how-to-find-largest-and-smallest-number-array-in-java.html

4.在给定的成对整数数组中,请找出所有总和等于给定数字的组合。

解决方法与代码:

http://javarevisited.blogspot.com/2014/08/how-to-find-all-pairs-in-array-of-integers-whose-sum-equal-given-number-java.html

5.如果数组中有多个重复项,如何找到重复的数字?

解决方法与代码:

http://javarevisited.blogspot.com/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html

6.用 Java 语言实现,在给出的数组中,删除重复项。

解决方法与代码:

http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

7.用 quicksort 算法实现对整数数组的排序。

解决方法和代码:

http://javarevisited.blogspot.com/2014/08/quicksort-sorting-algorithm-in-java-in-place-example.html

8.如何删除现有数组中的重复项?

解决方法和代码:

http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

9.用 Java 语言把数组进行反转。

解决方法和代码:

http://javarevisited.blogspot.com/2013/03/how-to-reverse-array-in-java-int-String-array-example.html

10.如何在不调用库的情况下删除数组中的重复项?

解决方法和代码:

http://javarevisited.blogspot.sg/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

十个问题太少?更多复杂问题,可访问:

http://javarevisited.blogspot.sg/2015/06/top-20-array-interview-questions-and-answers.html

链表

链表是另一种常见的数据结构,和数组相似,链表也是线性的数据结构并且以线性方式存储元素。而与数组不同的是,链表不是将元素存储在连续的位置中,而是可以存储在任意位置,彼此之间通过节点相互连接。

链表也可以说就是一个节点列表,每个节点中包含存储的值和下一个节点的地址。也正是因为这种结构,在链表里添加和删除元素很容易,你只需要更改链接而不用创建新的数组。但是搜索会很困难,并且在单链表中找到一个元素就需要 O(n)个时间。

链表有多种形式,如:单链表,允许你在一个方向上进行遍历;双链表,可以在两个方向上进行遍历;循环链表,最后节点的指针指向第一个节点从而形成一个环形的链;因为链表是一种递归数据结构,所以在解决链表问题时,熟练掌握递归算法就显得更加重要了。

下面是关于链表的一些最常见、热门的面试问题,大家可以着重练习:

1.如何在一次递归后找到单链表的中间元素?

解决方法和代码:

http://javarevisited.blogspot.sg/2012/12/how-to-find-middle-element-of-linked-list-one-pass.html

2.检查给定的链表中是否包含循环链表,并找出循环链表的起始节点。

解决方法和代码:

http://javarevisited.blogspot.sg/2013/05/find-if-linked-list-contains-loops-cycle-cyclic-circular-check.html

3.如何将列表反转(倒置)?

解决方法和代码:

http://www.java67.com/2016/07/how-to-reverse-singly-linked-list-in-java-example.html

4.如何在没有递归的情况下反转单链表?

解决方法和代码:

http://javarevisited.blogspot.sg/2017/03/how-to-reverse-linked-list-in-java-using-iteration-and-recursion.html

5.删除未经过排序的链表中重复的节点。

解决方法和代码:

https://www.geeksforgeeks.org/remove-duplicates-from-an-unsorted-linked-list/

6.计算单链表的长度。

解决方法和代码:

http://javarevisited.blogspot.sg/2016/05/how-do-you-find-length-of-singly-linked.html

7.找出单链表中倒数第三个节点。

解决方法和代码:

http://javarevisited.blogspot.sg/2016/07/how-to-find-3rd-element-from-end-in-linked-list-java.html

8.如何使用 Stack 查找两个链表的和?

解决方法和代码:

https://www.geeksforgeeks.org/sum-of-two-linked-lists/

这些问题可以帮你提升解决问题的能力,加深对链表数据结构的了解。

关于数组和链表间的区别,可详细阅读:

http://javarevisited.blogspot.sg/2013/07/difference-between-array-and-linked-list-java.html

更多复杂问题,可访问:

http://javarevisited.blogspot.sg/2017/07/top-10-linked-list-coding-questions-and.html


字符串

除了数组和链表数据结构,字符串是应聘过程中编程面试的另一个热门问题。在我参加过的编程面试中,每一个都涉及了有关字符串的问题。

值得庆幸的是,如果你了解数组,你可以很容易解决关于字符串的问题,因为字符串本身就是一个由字符组成的数组。

因此,你学过的所有用来解决数组编程问题的知识,也可以用来解决字符串的编程问题。

以下是一些在编程面试中高频出现的字符串问题:

1.如何输出字符串中重复的字符?

解决方法与代码:

http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html

2.如何判断两个字符串是否互为回文?

解决方法与代码:

http://javarevisited.blogspot.sg/2013/03/Anagram-how-to-check-if-two-string-are-anagrams-example-tutorial.html

3.如何找出字符串首个非重复的字符?

解决方法与代码:

https://javarevisited.blogspot.com/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html

4.如何用递归的方法将字符串进行反转?

解决方法与代码:

https://javarevisited.blogspot.com/2012/01/how-to-reverse-string-in-java-using.html

5.如何判断一个字符串是否只包含数字?

解决方法与代码:

http://javarevisited.blogspot.sg/2012/10/regular-expression-example-in-java-to-check-String-number.html

6.如何找到字符串中重复的字符?

解决方法与代码:

http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html

7.如何计算一个字符串中元音字母和辅音字母的个数?

解决方法与代码:

http://java67.blogspot.sg/2013/11/how-to-count-vowels-and-consonants-in-Java-String-word.html

8.如何计算一个给定字符在字符串中出现的次数?

解决方法与代码:

https://javarevisited.blogspot.com/2012/12/how-to-count-occurrence-of-character-in-String.html

9.如何找出一个字符串的所有排列组合?

解决方法与代码:

http://javarevisited.blogspot.com/2015/08/how-to-find-all-permutations-of-string-java-example.html

10.在不使用任何方法库的情况下,如何将一句话中的单词进行反转?

解决方法与代码:

http://www.java67.com/2015/06/how-to-reverse-words-in-string-java.html

11.如何判断一个字符串是否为另一个字符串循环移动的结果?

解决方法与代码:

http://www.java67.com/2017/07/string-rotation-in-java-write-program.html

12.如何判断一个字符串是否为回文?

解决方法与代码:

http://java67.blogspot.com/2015/06/how-to-check-is-string-is-palindrome-in.html

这些问题有助于提高你对字符串数据结构的理解。如果你在没有外界帮助的情况下,可以解决所有这些字符串问题,那么你的水平已经很棒了。

若想了解更多复杂的问题,建议学习一下《Algorithm Design Manual by Steven Skiena》这本书中的问题,里面大都是难度很高的算法问题。

如果你需要更多的练习,可以参考这一组问题,包含20个字符串编程问题。

问题链接:

https://javarevisited.blogspot.com/2015/01/top-20-string-coding-interview-question-programming-interview.html

二叉树

到目前为止,我们只涉及了线性数据结构,但现实世界的所有信息都不是以线性的形式展现的,因此出现了树结构。

树结构是一种将数据进行分层存储的数据结构。根据数据存储方式的不同,存在不同类型的树,比如二叉树,其中每个节点至多有两个子节点。

和二叉查找树一样,它们都是最流行的树形式的数据结构。因此,你会发现很多问题基于它们的问题,如计算节点数,如何进行遍历,计算深度,判断它们是否平衡。

解决二叉树问题的关键是要有扎实的知识理论,如什么是二叉树的大小或深度,什么是叶,以及什么是节点。还有对当前流行的遍历算法的理解,如前序遍历、后序遍历和中序遍历。

下面是一系列常在软件开发面试中出现的二叉树热门问题:

1.如何部署使用二叉查找树?

解决方法与代码:

http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3

2.给定一个二叉树,如何进行前序遍历?

解决方法与代码:

http://javarevisited.blogspot.sg/2016/07/binary-tree-preorder-traversal-in-java-using-recursion-iteration-example.html#axzz5ArdIFI7y

3.在不使用递归的情况下,如何对给定二叉树进行前序遍历?

解决方法与代码:

http://www.java67.com/2016/07/binary-tree-preorder-traversal-in-java-without-recursion.html

4.给定一个二叉树,如何进行中序遍历?

解决方法与代码:

http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

5.在不使用递归的情况下,如何使用中序遍历输出给定二叉树的所有节点?

解决方法与代码:

http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

6.如何实现后序遍历算法?

解决方法与代码:

http://www.java67.com/2016/10/binary-tree-post-order-traversal-in.html

7.在不使用递归的情况下,如何对二叉树进行后序遍历?

解决方法与代码:

http://www.java67.com/2017/05/binary-tree-post-order-traversal-in-java-without-recursion.html

8.如何输出一个二叉查找树的所有叶子?

解决方法与代码:

http://www.java67.com/2016/09/how-to-print-all-leaf-nodes-of-binary-tree-in-java.html

9.如何计算一个给定二叉树的叶子节点数目?

解决方法与代码:

http://javarevisited.blogspot.sg/2016/12/how-to-count-number-of-leaf-nodes-in-java-recursive-iterative-algorithm.html

10.给定一个数组,如何对其进行二叉搜索?

解决方法与代码:

http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3

如果你觉得自己对二叉树编程的理解还不够,无法独自解决这些问题,我列出了我使用过的书籍:

http://javarevisited.blogspot.sg/2015/07/5-data-structure-and-algorithm-books-best-must-read.html

http://javarevisited.blogspot.sg/2018/01/top-5-free-data-structure-and-algorithm-courses-java--c-programmers.html

其它算法编程问题

除了数据结构问题,大多数编程面试也会问有关算法、设计、位操作和一般的逻辑问题,在这部分中我会介绍这些问题。

在实际问题中应用这些概念是十分重要的,因为在面试中它们往往都比较难对付。多加练习不仅可以让你对这些概念更熟悉,也会让你在面试过程中更有信心。

1.如何实现冒泡排序算法?

解决方法与代码:

http://javarevisited.blogspot.sg/2014/08/bubble-sort-algorithm-in-java-with.html#axzz5ArdIFI7y

2.如何用迭代实现快速排序算法?

解决方法与代码:

http://javarevisited.blogspot.sg/2016/09/iterative-quicksort-example-in-java-without-recursion.html#axzz5ArdIFI7y

3.如何实现插入排序算法?

解决方法与代码:

http://www.java67.com/2014/09/insertion-sort-in-java-with-example.html

4.如何实现归并排序算法?

解决方法与代码:

http://www.java67.com/2018/03/mergesort-in-java-algorithm-example-and.html

5.如何实现桶排序算法?

解决方法与代码:

https://javarevisited.blogspot.com/2017/01/bucket-sort-in-java-with-example.html

6.如何实现计数排序算法?

解决方法与代码:

http://www.java67.com/2017/06/counting-sort-in-java-example.html

7.如何实现基数排序算法?

解决方法与代码:

http://www.java67.com/2018/03/how-to-implement-radix-sort-in-java.html

8.在不使用第三个变量的情况下,如何交换两个数字的值?

解决方法与代码:

http://www.java67.com/2015/08/how-to-swap-two-integers-without-using.html

9.如何判断两个矩形是否有重叠?

解决方法与代码:

http://javarevisited.blogspot.sg/2016/10/how-to-check-if-two-rectangle-overlap-in-java-algorithm.html

10.如何设计一个自动贩售机?

解决方法与代码:

https://javarevisited.blogspot.com/2016/06/design-vending-machine-in-java.html

推荐阅读:

《Cracking The Code Interview》书中介绍了189个编程问题及解决方法

50个电面编程问题:

http://javarevisited.blogspot.sg/2015/02/50-programmer-phone-interview-questions-answers.html

有关书籍:

https://javarevisited.blogspot.com/2016/06/top-5-books-for-programming-coding-interviews-best.html

练习解决的实际问题越多,准备就越充分。希望这份面试资源对大家有帮忙,面试顺利,都能获得好结果!

原文链接:

https://hackernoon.com/50-data-structure-and-algorithms-interview-questions-for-programmers-b4b1ac61f5b0

推荐阅读

  • 带你十分钟快速入门画图神器 Matplotlib

  • 统计了50万人的身高数据才发现:大家都爱虚报身高

  • 当代志怪:计算机菩萨

01

 微 信 群  

添加小编微信:tangguoyemeng,备注“进群”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

成为群成员,或拉人进群,

还有机会参与红包抽奖,获得免费赠书哦~~

02

 征 稿 

CSDN作为国内专业的云计算服务平台,目前提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、机器学习、智能算法等相关云计算观点、技术、平台、实践、云产业咨询等服务。CSDN 公众号也一直坚持「与千万技术人共成长」的理念,深度解读行业内热门技术与场景应用,致力于让所有开发者保持敏锐的技术嗅觉、对行业趋势与技术获得更广阔的认知。

文章题材

  • 首先你需要关注我们的公众号“CSDN云计算”,这样你会更准确了解我们需要的文章风格;

  • 侧重于云计算领域相关的文章,可以是技术、运维、趋势等方面的务实内容;

  • 原创,要求文章有鲜明观点和看法。

投稿须知

  • 稿费:根据原创性、实用性和时效性等方面进行审核,通过的文章会发布在本微信平台。一经采用,我们将支付作者酬劳。酬劳可能不多,这代表的是一个心意,更多是因为爱好,是有识之士抒发胸怀的一种方式;

  • 字数要求:稿件字数以2K-8K为宜,少于2K或多于8K都会一定程度降低阅读愉悦感;

  • 投稿邮箱:lijy@csdn.net。或者添加微信表明来意,微信号:tangguoyemeng。请备注投稿+姓名+公司职位

如果咱们的合作稳定又愉快,还可以签订合同长期合作哦!


2018 AI开发者大会

拒绝空谈,技术争鸣

2018 AI开发者大会(AI NEXTCon)由中国IT社区CSDN与硅谷AI社区AICamp联合出品的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们只讲技术,拒绝空谈,诚挚邀请AI业内人士一起共铸人工智能新篇章!

2018 AI开发者大会首轮重磅嘉宾及深度议题现已火热出炉,扫码抢“鲜”看。国庆特惠,购票立享 折优惠!

干货 | 算法和编程面试题精选TOP50!(附代码+解题思路+答案)相关推荐

  1. 算法和编程面试题精选TOP50!(附代码+解题思路+答案)

    AI技术年度盛会即将开启!11月8-9日,来自Google.Amazon.微软.Facebook.LinkedIn.阿里巴巴.百度.腾讯.美团.京东.小米.字节跳动.滴滴.商汤.旷视.思必驰.第四范式 ...

  2. 算法和编程面试题精选 TOP50!(附代码+解题思路+答案)

    本篇文章的面试资源,主要包含五部分内容:数组.链表.字符串.二叉树和重要算法(如排序算法)的编程面试题,其中每部分内容,都列出了一些最常被问到的热门问题.并且在每个题目后,给出了可以参考的解决思路和代 ...

  3. 2021最新 MySQL面试题精选(附刷题小程序)

    推荐使用小程序阅读 为了能让您更加方便的阅读 本文所有的面试题目均已整理至小程序<面试手册> 可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验! 最近梳理汇总了Java面试常遇到的 ...

  4. 2021最新 SpringBoot面试题精选(附刷题小程序)

    推荐使用小程序阅读 为了能让您更加方便的阅读 本文所有的面试题目均已整理至小程序<面试手册> 可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验! 文章目录 推荐使用小程序阅读 1. ...

  5. 计算机组装与维修问答题答案,计算机组装与维修试题精选(内附答案).doc

    计算机组装与维修试题精选(内附答案).doc 计算机组装与维修试题精选? 一.?填空题?? 1.一个完整的计算机系统是由(?)和(?)两部分组成的. 2.?冯·诺依曼结构计算机主要有(?).(?).( ...

  6. leetcode探索专题中的初级算法练习题(python代码+解题思路)

    本文记录leetcode探索专题中的初级算法练习题,附python实现代码&解题思路,做题过程不免查阅网络资料,侵删~如有错误,欢迎指正交流! 目录 专题一:数组: 26.从排序数组中删除重复 ...

  7. 基于粒子群算法优化的Elman神经网络数据预测-附代码

    基于粒子群算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于粒子群算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电 ...

  8. 基于布谷鸟算法优化的Elman神经网络数据预测-附代码

    基于布谷鸟算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于布谷鸟算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电 ...

  9. 基于鲸鱼算法优化的Elman神经网络数据预测-附代码

    基于鲸鱼算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于鲸鱼算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电力负 ...

最新文章

  1. python openvc 裁剪、剪切图片 提取图片的行和列
  2. framebuffer小程序显示3个矩形 测试
  3. 已知三角形三边长怎么求面积_解三角形问题中的常见错解分析
  4. python安装后如何使用-python如何安装下载后的模块
  5. 项目云台控制页面(仿遥控器)
  6. 打卡赠书,新一年的读者福利 !
  7. 姿态估计1-08:FSA-Net(头部姿态估算)-源码无死角讲解(3)-Fine-grained 以及Scoring function
  8. 再看《西游记》——吴承恩眼中的现实社会是如何折射到《西游记》中的
  9. 从0到1 激活函数(一)sigmod函数
  10. 云计算具有哪些优势 如何快速系统学习云计算
  11. C# SolidWorks 二次开发 API --- 2018版 中文翻译 之官方示例
  12. 拼多多开店有哪些优势?
  13. word-spacing letter-spacing white-space 分辨
  14. elementUI表格分页排序
  15. (附源码)springboot在线考试系统 毕业设计 160935
  16. 国产运动耳机品牌排行榜、2022运动耳机款式盘点
  17. open falcon mysql参数_Open-falcon原理介绍
  18. 零基础教你搭建一个自己的靶场!
  19. 通达oa mysql_通达OA系统优化-对mysql数据库减肥
  20. 图片格式有哪些?区别是什么

热门文章

  1. 解决微信小程序 [Component] slot ““ is not found.
  2. java jdk 未知错误_解决JAVA JDK安装出错的最常见问题,帮你排除困扰
  3. php object 对象不存在。增加对象_PHP核心
  4. delphi中的函数传参如何传枚举参数_我是这样使用SpringBoot(API传参)
  5. 你会接受同门师兄的追求吗?
  6. 卷烟厂招工内卷:要求本科以上,但报名的硕士太多
  7. 这回真要涨工资了!国务院教育督导办:2020年把义务教育教师平均工资收入水平不低于当地公务员作为督导检查重点...
  8. 又一所“国字头”大学要来?屠呦呦也在
  9. 【文末有福利】如何理解我们所处世界的复杂性?
  10. 这些行为,属于学术不端!