java算法面试题_Java算法面试题汇总
原标题:Java算法面试题汇总
1. 字符串
如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法。
toCharArray() // 获得字符串对应的char数组
Arrays.sort() // 数组排序
Arrays.toString(char[] a) // 数组转成字符串
charAt(int x) // 获得某个索引处的字符
length() // 字符串长度
length // 数组大小
2. 链表
在Java中,链表的实现非常简单,每个节点Node都有一个值val和指向下个节点的链接next。
class Node {
int val;
Node next;
Node(int x) {
val = x;
next = null;
}
}
链表两个著名的应用是栈Stack和队列Queue。
栈:
class Stack{
Node top;
public Node peek(){
if(top != null){
return top;
}
return null;
}
public Node pop(){
if(top == null){
return null;
}else{
Node temp = new Node(top.val);
top = top.next;
return temp;
}
}
public void push(Node n){
if(n != null){
n.next = top;
top = n;
}
}
}
队列:
class Queue{
Node first, last;
public void enqueue(Node n){
if(first == null){
first = n;
last = first;
}else{
last.next = n;
last = n;
}
}
public Node dequeue(){
if(first == null){
return null;
}else{
Node temp = new Node(first.val);
first = first.next;
if(last == temp) last = first;
return temp;
}
}
}
3. 树
这里的树通常是指二叉树,每个节点都包含一个左孩子节点和右孩子节点,像下面这样:
class TreeNode{
int value;
TreeNode left;
TreeNode right;
}
下面是与树相关的一些概念:
平衡 vs. 非平衡:平衡二叉树中,每个节点的左右子树的深度相差至多为1(1或0)。
满二叉树(Full Binary Tree):除叶子节点以为的每个节点都有两个孩子。
完美二叉树(Perfect Binary Tree):是具有下列性质的满二叉树:所有的叶子节点都有相同的深度或处在同一层次,且每个父节点都必须有两个孩子。
完全二叉树(Complete Binary Tree):二叉树中,可能除了最后一个,每一层都被完全填满,且所有节点都必须尽可能想左靠。
4. 排序
下面是不同排序算法的时间复杂度,你可以去wiki看一下这些算法的基本思想。
AlgorithmAverage TimeWorst TimeSpace
冒泡排序n^2n^21
选择排序n^2n^21
Counting Sortn+kn+kn+k
Insertion sortn^2n^2
Quick sortn log(n)n^2
Merge sortn log(n)n log(n)depends
5. 递归 vs. 迭代
对程序员来说,递归应该是一个与生俱来的思想(a built-in thought),可以通过一个简单的例子来说明。
问题: 有n步台阶,一次只能上1步或2步,共有多少种走法。
步骤1:找到走完前n步台阶和前n-1步台阶之间的关系。
为了走完n步台阶,只有两种方法:从n-1步台阶爬1步走到或从n-2步台阶处爬2步走到。如果f(n)是爬到第n步台阶的方法数,那么f(n) = f(n-1) + f(n-2)。
步骤2: 确保开始条件是正确的。
f(0) = 0;
f(1) = 1;
public static int f(int n){
if(n <= 2) return n;
int x = f(n-1) + f(n-2);
return x;
}
递归方法的时间复杂度是n的指数级,因为有很多冗余的计算,如下:
f(5)
f(4) + f(3)
f(3) + f(2) + f(2) + f(1)
f(2) + f(1) + f(1) + f(0) + f(1) + f(0) + f(1)
f(1) + f(0) + f(1) + f(1) + f(0) + f(1) + f(0) + f(1)
直接的想法是将递归转换为迭代:
public static int f(int n) {
if (n <= 2){
return n;
}
int first = 1, second = 2;
int third = 0;
for (int i = 3; i <= n; i++) {
third = first + second;
first = second;
second = third;
}
return third;
}
6. 动态规划
动态规划是解决下面这些性质类问题的技术:
一个问题可以通过更小子问题的解决方法来解决(译者注:即问题的最优解包含了其子问题的最优解,也就是最优子结构性质)。
有些子问题的解可能需要计算多次(译者注:也就是子问题重叠性质)。
子问题的解存储在一张表格里,这样每个子问题只用计算一次。
需要额外的空间以节省时间。
爬台阶问题完全符合上面的四条性质,因此可以用动态规划法来解决。
public static int[] A = new int[100];
public static int f3(int n) {
if (n <= 2)
A[n]= n;
if(A[n] > 0)
return A[n];
else
A[n] = f3(n-1) + f3(n-2);//store results so only calculate once!
return A[n];
责任编辑:
java算法面试题_Java算法面试题汇总相关推荐
- java页面间面向对象的方法面试题_JAVA面向对象面试题带答案(墙裂推荐)
1) 在Java中,如果父类中的某些方法不包含任何逻辑,并且需要有子类重写,应该使用(c)关键字来申明父类的这些方法. a) Finalc b) Static c) Abstract d) Void ...
- java笔试面试题_Java面试笔试题大全
Java面试笔试题大全 42.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? switch(expr1)中,expr1是一个整数表达式.因此传递给 switc ...
- java综合面试题_JAVA 综合面试题 PDF 下载
主要内容: Java面试题整理 Java面向对象 1. super()与this()的区别? This():当前类的对象,super父类对象.Super():在子类访问父类的成员和行为, 必须受类继承 ...
- JAVA工程师定向招聘_Java工程师面试题整理[社招篇]
http://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 2.访问修饰符public,private,protec ...
- java线程实例题_java线程相关试题实例源码代码
java线程相关试题实例源码代码. /** * 计算输出其他线程锁计算的数据 */ class ThreadA { public static void main(String[] args) { T ...
- java static面试题_Java static面试题
首页 > 基础教程 > 关键字 > static关键字 Java static面试题 1. 为什么要用static关键字? 通常来说,用new创建类的对象时,数据存储空间才被分配,方 ...
- java校招笔试题目_Java校招笔试题
2020校招笔试题答案及评分标准 满分100分 时间1小时 一.简答题: (5分)写出你用过的linux命令,举例说明其中几个的具体用法. 答案:略.评分标准:正确五个,1分一个. (5分)写出TCP ...
- java面试全套清单_Java 全套面试题 PDF 下载
主要内容: Java 最常见 面试题全解析:面试必备 序言 在本篇文章开始之前,我想先来回答一个问题:我为什么要写这样一篇关于面试的文章?原因有三个:第一,我想为每一个为梦想时刻准备着的"有 ...
- 中级java笔试题_Java中级面试题合集
Java中级面试题合集:1.弹出式选择菜单(Choice)和列表(List)有什么区别 Choice是以一种紧凑的形式展示的,需要下拉才能看到所有的选项.Choice中一次只能选中一个选项.List同 ...
- java io 面试题_Java IO面试题及答案整理汇总
说到Java开发,所有的java程序员都知道Java IO流,而且相信大家在具体的工作中也都会用到,但是其实很多朋友们并没有完全掌握java IQ流的内容,而且java IO在java 面试中也会考察 ...
最新文章
- vue router 入门笔记
- phpDocument(PHPDoc) 标签大全
- 修改数据,如何将原数据带到输入框
- 不做在线电商,或许才是永辉超市的未来
- nginx delete form表单 收不到参数_HTTP 文件上传的一个后端完善方案(NginX)
- Python使用select实现异步通信
- 内存和显存_小科普 |“内存”和“显存”有啥关系?
- 泛化性的危机!LeCun发文质疑:测试集和训练集永远没关系...
- 土豆首页图片延迟加载的效果
- 阿里负载均衡,配置中间证书问题(在starcom申请免费DV ssl)
- 如何让 Linux 下非 root 用户程序使用小于 1024 端口
- 使用虚幻4进行安卓打包
- Kvaser Memorator数据记录仪通过KVmlib配置和读取SD卡
- 基于Zigbee的智能家居系统
- linux解压缩包命令
- dismiss android,在 dialog.dismiss( ) 上,安卓的窗口甚至泄露了_dialog_开发99编程知识库...
- 你想要的宏基因组-微生物组知识全在这(180901)
- 转简单之美——系统设计黄金法则
- 职业规划:45岁之后,外企精英们去哪里?
- php博客系统答辩ppt,个人博客系统设计与实现答辩PPT.ppt