0%

4.15米哈游笔试

4.15 米哈游笔试

20:00 - 22:00 看起来基本是寄了

10个单选 10个不定项选择 3个算法题

选择题涉及:进程线程、TCP/UDP、js 原型,resolve,输入输出,css flex模型

算法题

首先我不熟悉输入输出,在这个 ACM 的界面磨蹭了半天才开始写,有点抽象

然后后面就基本没时间写了

1. 正整数

给一个偶数位正整数,分割成两部分后求和,求和的最小值。

例如输入4321,输出64。

思路基本上是从中间切,或者中间的+1-1位置切

但是从中间切就过了85%了,乐

2. 反应

给一个 n * m 的矩形,格子内随机存在 T 和 I,如果 T 和 I 处在相邻位置(上下左右)会反应。

输出反应后的矩形

输入:
3 4
T I T .
. . . I
. T . I

输出:
. . . .
. . . I
. T . I

思路就是遍历,然后看上下左右有没有相反的元素,开一个新布尔数组用于记录该位置有没有反应,先全值为 false,反应了就置 true。最后再遍历一遍统一处理输出。

3. 猜数组

有两个数组 a 和 b,遵循以下规律:

  • $b_i = a_i + a_{i+1}$
  • a.length = b.length + 1
  • a 数组的元素均为正整数

给你 a 数组的长度和 b 数组,返回 a 数组所有可能的情况的数量。

输入:
3
3 4

输出:
2

解释:数组 a 有可能是[1,2,2]或[2,1,3],共两种情况,故返回2.

思路:寻找 $a_0$ 的大小范围即可

因为 a 数组的元素均为正整数,所以显然 b 数组的元素也都是正整数。

当 $a_0$ 确定了,后面的数字也就跟着确定了,于是问题转化为确定 $a_0$ 的范围。

从 $a_i > 0$ 着手:因为 $b_i = a_i + a_{i+1}$ ,所以可以举例:

  • 首先,$a_0 >0$ ;

  • $i=0$ 时, $b_0 = a_0 + a_{1}$, => $a_1 = b_0 - a_0$ ,因为 $a_1 > 0$ ,=> $b_0-a_0>0$ ,=> $a_0 < b_0$ 。

    因为已经知道 $b_0$ 的值,所以此时 $0<a_0<b_0$ 。

  • $i=1$ 时,可以得到 $a_0 > -b_1+b_0$ ;

  • $i=2$ 时,可以得到 $a_0 < b_2 -b_1+b_0$ ;

  • $i=3$ 时,可以得到 $a_0 > b_3 + b_2 -b_1+b_0$ ;

至此得到规律,当处理到 b 数组的偶数位时,限制的是 $a_0$ 的上限;当处理到 b 数组的奇数位时,限制的是 $a_0$ 的下限。

所以只需要从头开始遍历 b 数组,取两个数 max、min 为上下限,当处理到奇数位时如果大于min则更新,当处理到偶数为时如果小于max则更新。特殊情况,若 max < min 则返回0。

最后返回 max - min - 1 即可(因为 $a_0$ 的取值范围是 (min, max),即从 min+1 到 max-1的数字的数量)。