8月22日猿辅导笔试

前言

2020年08月22日晚上7点开始的猿辅导的笔试,包括了15题选择题和3道选择题。

选择题

选择题里比较有印象的是,邻接矩阵零元素的个数,完全不会做,其它的基本只要耐心都是可以做的,不过我花的时间稍微有点久。

第一题

第一题是给定一个完全二叉树,然后根据这棵二叉树,从根节点出发逆时针旋转一周回到起点,打印路上所有的节点。

image-20200823151018899

上面的那个例子,你需要输出的是1 2 4 8 9 5 6 7 3,而实际很多人输出的都是1 2 4 8 9 7 3,漏掉了中间的5和6,所以一个案例都过不去。

那了解了这个代码还算是比较简单的:

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
public class Yuan1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);

int n = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = in.nextInt();
}
int index = 0;
int turn = 0;

// 开始遍历最左边的一列
while (index < arr.length) {
System.out.print(arr[index] + " ");
index = index * 2 + 1;
turn++;
}

// 开始遍历最下面一层的
index = (index - 1) / 2 + 1;
while (index < arr.length) {
System.out.print(arr[index] + " ");
index++;
}

// 还要遍历上一层的
int temp = ((int) Math.pow(2, turn) - n - 1) / 2;
int start = (int) Math.pow(2, turn - 1) - 1 - temp;
for (int i = start; i < start + temp; i++) {
System.out.print(arr[i] + " ");
}

if (n == ((int) Math.pow(2, turn) - 1)) {
turn = turn - 1;
} else {
turn = turn - 2;
}
index = (int) Math.pow(2, turn) - 2;
while (index > 0) {
System.out.print(arr[index] + " ");
turn--;
index = (int) Math.pow(2, turn) - 2;
}
}
}

PS:有人说这道题leetcode上有,我没找到…

第二题

给定一个矩阵,求出里面的最大的矩阵和。只不过这里的矩阵最左边和最右边是可以连接的,形成一个柱子。

Leetcode题目的变种,如果不考虑相连的情况,是可以过40%的。

第三题

LeetCode的原题375,就是稍微加了可以帮你免除K次金额而已。

但是我个人当时想的是,加了这个K次免费猜的次数,那这K次是不是可以猜测大胆一点,用一点新奇的方法,实际证明我错了。

总结

猿辅导的题,怎么说呢,直接出leetcode的题目是不是不太好啊?