小厂实习面试记录-002

1.二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
if(root==null) return 0;
int left = minDepth(root.left);//获取左子树深度
int right = minDepth(root.right);//获取右子树深度
if(left==0||right==0){//左右没有子节点不能计算深度
return left==0?right+1:left+1;
}
return Math.min(left,right)+1;
}

}

2.有效的括号

给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public boolean isValid(String s) {
Stack<Character> stk = new Stack<>();
for(int i = 0;i<s.length();i++){
char c = s.charAt(i);
if(c=='['||c=='('||c=='{'){
switch(c){
case '[': stk.push(']');break;
case '(': stk.push(')');break;
case '{': stk.push('}');break;
}
}else{
if(stk.size()==0||c!=stk.pop()){
return false;
}
}
}
return stk.isEmpty();
}
}

3.Integer类了解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main.test02;

/**
* @version V1.0
* @ClassName: main.test02.Test04.java
* @Copyright swpu
* @author: zty-f
* @date: 2022-05-08 10:37
* @Description: Integer测试
*/
public class Test04 {
public static void main(String[] args) {
//Integer有缓存池 -128~127 可以通过反射调节
Integer a = 12;
Integer b = 12;//会调用 调⽤Integer.valueOf(12)。而从Integer的valueOf()源码可以看到,这里的实现并不是简单的new Integer,而是用IntegerCache做一个cache。
System.out.println(a==b);//true
Integer c = 999;
Integer d = 999;
System.out.println(c==d);//false
Integer e = -12;
Integer f = -12;
System.out.println(e==f);//true
}
}

4.对象交换输出判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package main.test02;

/**
* @version V1.0
* @ClassName: main.test02.Test05.java
* @Copyright swpu
* @author: zty-f
* @date: 2022-05-08 10:45
* @Description: 对象交换输出测试
*/
//打印结果如下
/*
X:xiaoli
Y:xiaoming
xiaoming:xiaoming
xiaoli:xiaoli
*/

public class Test05 {
public static void main(String[] args) {
People xiaoming = new People("xiaoming",18);
People xiaoli = new People("xiaoli",18);
swap(xiaoming,xiaoli);
System.out.println("xiaoming:"+xiaoming.getName());
System.out.println("xiaoli:"+xiaoli.getName());
}
public static void swap(People x,People y){//传入的只是引用副本,交换不会对原引用产生变化,可以通过set方法改变对象实体值
People temp = x;
x = y;
y = temp;
System.out.println("X:"+x.getName());
System.out.println("Y:"+y.getName());
}
}
class People{
private String name;
private int age;

public People(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

5.Error和Exception的区别

Error:JVM 无法解决的严重问题,如栈溢出StackOverflowError、内存溢出OOM等。程序无法处理的错误。

Exception:其它因编程错误或偶然的外在因素导致的一般性问题。可以在代码中进行处理。如:空指针异常、数组下标越界等。


小厂实习面试记录-002
https://zty-f.github.io/2022/05/08/小厂面试记录-002/
作者
ZTY
发布于
2022年5月8日
更新于
2025年1月2日
许可协议