原标题: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算法面试题汇总相关推荐

  1. java页面间面向对象的方法面试题_JAVA面向对象面试题带答案(墙裂推荐)

    1) 在Java中,如果父类中的某些方法不包含任何逻辑,并且需要有子类重写,应该使用(c)关键字来申明父类的这些方法. a) Finalc b) Static c) Abstract d) Void ...

  2. java笔试面试题_Java面试笔试题大全

    Java面试笔试题大全 42.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? switch(expr1)中,expr1是一个整数表达式.因此传递给 switc ...

  3. java综合面试题_JAVA 综合面试题 PDF 下载

    主要内容: Java面试题整理 Java面向对象 1. super()与this()的区别? This():当前类的对象,super父类对象.Super():在子类访问父类的成员和行为, 必须受类继承 ...

  4. JAVA工程师定向招聘_Java工程师面试题整理[社招篇]

    http://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 2.访问修饰符public,private,protec ...

  5. java线程实例题_java线程相关试题实例源码代码

    java线程相关试题实例源码代码. /** * 计算输出其他线程锁计算的数据 */ class ThreadA { public static void main(String[] args) { T ...

  6. java static面试题_Java static面试题

    首页 > 基础教程 > 关键字 > static关键字 Java static面试题 1. 为什么要用static关键字? 通常来说,用new创建类的对象时,数据存储空间才被分配,方 ...

  7. java校招笔试题目_Java校招笔试题

    2020校招笔试题答案及评分标准 满分100分 时间1小时 一.简答题: (5分)写出你用过的linux命令,举例说明其中几个的具体用法. 答案:略.评分标准:正确五个,1分一个. (5分)写出TCP ...

  8. java面试全套清单_Java 全套面试题 PDF 下载

    主要内容: Java 最常见 面试题全解析:面试必备 序言 在本篇文章开始之前,我想先来回答一个问题:我为什么要写这样一篇关于面试的文章?原因有三个:第一,我想为每一个为梦想时刻准备着的"有 ...

  9. 中级java笔试题_Java中级面试题合集

    Java中级面试题合集:1.弹出式选择菜单(Choice)和列表(List)有什么区别 Choice是以一种紧凑的形式展示的,需要下拉才能看到所有的选项.Choice中一次只能选中一个选项.List同 ...

  10. java io 面试题_Java IO面试题及答案整理汇总

    说到Java开发,所有的java程序员都知道Java IO流,而且相信大家在具体的工作中也都会用到,但是其实很多朋友们并没有完全掌握java IQ流的内容,而且java IO在java 面试中也会考察 ...

最新文章

  1. vue router 入门笔记
  2. phpDocument(PHPDoc) 标签大全
  3. 修改数据,如何将原数据带到输入框
  4. 不做在线电商,或许才是永辉超市的未来
  5. nginx delete form表单 收不到参数_HTTP 文件上传的一个后端完善方案(NginX)
  6. Python使用select实现异步通信
  7. 内存和显存_小科普 |“内存”和“显存”有啥关系?
  8. 泛化性的危机!LeCun发文质疑:测试集和训练集永远没关系...
  9. 土豆首页图片延迟加载的效果
  10. 阿里负载均衡,配置中间证书问题(在starcom申请免费DV ssl)
  11. 如何让 Linux 下非 root 用户程序使用小于 1024 端口
  12. 使用虚幻4进行安卓打包
  13. Kvaser Memorator数据记录仪通过KVmlib配置和读取SD卡
  14. 基于Zigbee的智能家居系统
  15. linux解压缩包命令
  16. dismiss android,在 dialog.dismiss( ) 上,安卓的窗口甚至泄露了_dialog_开发99编程知识库...
  17. 你想要的宏基因组-微生物组知识全在这(180901)
  18. 转简单之美——系统设计黄金法则
  19. 职业规划:45岁之后,外企精英们去哪里?
  20. php博客系统答辩ppt,个人博客系统设计与实现答辩PPT.ppt

热门文章

  1. 你需要知道的关于铁氧体磁珠的一切
  2. 常用的数据库维护语句
  3. 一元云购 java源码
  4. 实用主义学python爬虫_麻瓜编程 实用主义学Python2018
  5. 压力测试工具----JMeter
  6. 金山pdf阅读器 独立版V10.1.0.6683
  7. H5+canvas+js实现连线题
  8. ILRuntime入门11 LitJson
  9. K3CLOUD业务系统编码规则设置
  10. IC卡读写器c++builder源代码续