JAVA 高频算法面试题汇总

  • 时间:
  • 浏览:1
  • 来源:跟我学网络

一、字符串(String)类算法面试题

1) String, StringBuilder 和 StringBuffer 三者有什么不同?

2) 为什么String类型在Java中是不可变的?

3) 在Java语言中,如何split string?

4) 为什么char数组能比String更好的去存储password?

5) 写一个函数判断一个字符串是否是回文串?

OJ 地址:http://www.lintcode.com/en/problem/valid-palindrome/

参考答案:http://www.jiuzhang.com/solution/valid-palindrome/

6) 写一个函数实现从字符串中删除任意给出的字符

7) 分别用递归和非递归的方法,打印出一个字符串的所有全排列

OJ 地址:http://www.lintcode.com/en/problem/string-permutation-ii/

参考答案:http://www.jiuzhang.com/solution/string-permutation-ii/

8) 写一个函数,从给出的字符串中求出由这些字母构成的最长的回文串。

OJ 地址:http://www.lintcode.com/en/problem/longest-palindrome/

参考答案:http://www.jiuzhang.com/solution/longest-palindrome/

9) 如何从一个字符串中找出第一个非重复的字符?

10) 如何并发计算一个给定的字符在字符串中出现的次数?

11) 写出一个函数判断两个字符串是否可以通过改变字母的顺序变成一样的字符串

OJ 地址:http://www.lintcode.com/en/problem/two-strings-are-anagrams/

参考答案:http://www.jiuzhang.com/solution/two-strings-are-anagrams/

12) 如何转换以一个数字化的字符串变成一个整数?

OJ 地址:http://www.lintcode.com/en/problem/string-to-integer/

参考答案:http://www.jiuzhang.com/solution/string-to-integer/

二、数组(Array)类算法面试题

1) 一个包含1-100数字的数组中,有一个数字丢失了,如何快速的找出它?

OJ 地址:http://www.lintcode.com/en/problem/find-the-missing-number/

参考答案:http://www.jiuzhang.com/solution/find-the-missing-number/

2)一个包含1-100数字的数组中,有一个数字重复了,如何快速的找出它?

OJ 地址:http://www.lintcode.com/en/problem/find-the-duplicate-number/

参考答案:http://www.jiuzhang.com/solution/find-the-duplicate-number/

3)一个包含1-100数字的数组中,有多个数字重复了,如何快速的找出他们?

4) 给出两个数组,如何找出那些出现在第一个数组中,但是没有出现在第二个数组中的数字?

5) 如何找出第二大的数在一个整数数组中?

OJ 地址:http://www.lintcode.com/zh-cn/problem/second-max-of-array/



参考答案:http://www.jiuzhang.com/solution/second-max-of-array/

6) 找出所有和等于给出数组的两两组合的pair对

OJ 地址:http://www.lintcode.com/en/problem/two-sum-unique-pairs/

参考答案:http://www.lintcode.com/zh-cn/problem/two-sum-unique-pairs/

7) 用Java实现如何从一个数组中移除重复的元素?

OJ 地址:http://www.lintcode.com/en/problem/remove-duplicate-numbers-in-array/

参考答案:http://www.lintcode.com/zh-cn/problem/remove-duplicate-numbers-in-array/ 8) 如何找出最大和最小的数字在一个数组中?

OJ 测试:http://www.lintcode.com/en/problem/max-of-array/

参考答案:http://www.lintcode.com/zh-cn/problem/max-of-array/

9) 如何找出最大的两个数在一个数组中?

三、链表(Linkedlist)类算法题

1) 如何找出一个单向链表的中间元素?

OJ 测试:http://www.lintcode.com/en/problem/middle-of-linked-list/

参考答案:http://www.jiuzhang.com/solution/middle-of-linked-list/

2) 如何找出单向链表中的倒数第3个元素?

OJ 地址:http://www.lintcode.com/en/problem/nth-to-last-node-in-list/

参考答案: http://www.jiuzhang.com/solution/nth-to-last-node-in-list/

3) 如何判断一个单项链表是否与环? 如果有环,如何找出环的起始位置?

OJ 测试:http://www.lintcode.com/en/problem/linked-list-cycle/

参考答案:http://www.jiuzhang.com/solution/linked-list-cycle/

4)如何翻转一个链表?

OJ 测试:http://www.lintcode.com/en/problem/reverse-linked-list/

参考答案:http://www.jiuzhang.com/solution/reverse-linked-list/

5) 比较链表和数组这两个数据结构的不同点

四、二叉树(Binary Tree)类算法题

1) 如何找出树的深度?

OJ 测试:http://www.lintcode.com/en/problem/maximum-depth-of-binary-tree/

参考答案:http://www.jiuzhang.com/solution/maximum-depth-of-binary-tree/

2)写一个函数打印出树的中序遍历

OJ 测试:http://www.lintcode.com/en/problem/binary-tree-inorder-traversal/

参考答案:http://www.jiuzhang.com/solution/binary-tree-inorder-traversal/

3) 打印出书的所有叶子节点

OJ 测试:http://www.lintcode.com/en/problem/binary-tree-leaf-sum/

参考答案:http://www.jiuzhang.com/solution/binary-tree-leaf-sum/

4) 用Java写一个方法,判断一棵树是否是二叉搜索树

OJ 测试:http://www.lintcode.com/en/problem/validate-binary-search-tree/

参考答案:http://www.jiuzhang.com/solution/validate-binary-search-tree/

5) 用Java判断一棵树是否是平衡树

OJ 测试:http://www.lintcode.com/en/problem/balanced-binary-tree/

参考答案:http://www.jiuzhang.com/solution/balanced-binary-tree/

五、查找和排序类(Searching and Sorting)

1) 写一个程序用快排原地排序一个数组

OJ 测试:http://www.lintcode.com/en/problem/sort-integers-ii/

参考答案:http://www.jiuzhang.com/solution/sort-integers-ii/

2) 用Java或者C++写一个程序去实现二分搜索算法

OJ 测试:http://www.lintcode.com/en/problem/classical-binary-search/



参考答案:http://www.jiuzhang.com/solution/classical-binary-search/

3) 如何使用Comparator, 在Java内实现对对象的排序

4) 用Java写一个程序去实现插入排序

OJ 测试:http://www.lintcode.com/en/problem/sort-integers/

参考答案:http://www.jiuzhang.com/solution/sort-integers/

5) 用Java写一个程序去实现冒泡排序

OJ 测试:http://www.lintcode.com/en/problem/sort-integers/

参考答案:http://www.jiuzhang.com/solution/sort-integers/

六、数(Numbers)

1) 写一个程序去判断一个数是否是2的幂次

OJ 测试:http://www.lintcode.com/en/problem/o1-check-power-of-2/

参考答案:http://www.jiuzhang.com/solution/o1-check-power-of-2/

2) 写一个程序去判断一个数字是否是回文的

3) 写一个程序判断一个整数是否是水仙花数?

OJ 测试:http://www.lintcode.com/en/problem/narcissistic-number/

参考答案:http://www.jiuzhang.com/solution/narcissistic-number/

4) 写一个程序,找出给出数字的所有素因子

OJ 测试:http://www.lintcode.com/en/problem/prime-factorization/

参考答案:http://www.jiuzhang.com/solution/prime-factorization/

5) 写一个函数去计算第n个斐波那契数?是否能用递归和非递归两种方法?

OJ 测试:http://www.lintcode.com/en/problem/fibonacci/

参考答案:http://www.jiuzhang.com/solution/fibonacci/

知乎 Live 预告

如何高效学习Java:Java研发工程师学习路线

Live 主讲人
Mark Chen
毕业于北京大学信息科学与技术学院。就职于 Google,斩获 offer 包括 Baidu, 网易, Hulu, Google, Microsoft, 小米等。
Chengliang Gao
北京大学网络与信息系统研究所硕士在读,曾在微软亚洲研究院(MSRA)实习,负责Android平台上项目的算法调优及部分模块实现。

Live 大纲:
编程语言是什么样的角色?
如何学习 Java 才能保持自己的竞争力?
Java 的具体学习路线和学习内容

此次 Live 将在北京时间2月8日周四晚上8点举行,报名请戳:

如何高效学习Java:Java研发工程师学习路线www.zhihu.com