前言
2020年09月02日上午10点30开始,历时两小时。还好我看了一眼邮件,差点错过了。
题目包含选择题和编程题,选择那部分是15题选择题,共计45分;编程3题,分别是15分,20分,20分。
选择题还考察了加解密算法,有点忘记了,还好是选择题…
第一题
给定一个数组,然后将它们两两合并,然后记录下和。
这题我真心是糊涂了,那比如数组是[1,2,3,4,5],第一次是留下[3,7,5]呢还是[3,7]呢?我是按照第一种想的,所以很简单,因为每次的和必然是相同的,也就是我只需要计算一下中间合并的次数就可以了:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | public int getMinScore(int[] gz) {if (gz == null || gz.length == 0) {
 return 0;
 }
 if (gz.length == 1) {
 return gz[0];
 }
 int sum = 0;
 int count = 0;
 int temp = 1;
 for (int i : gz) {
 sum += i;
 }
 while (true) {
 temp = temp * 2;
 count++;
 if (temp >= gz.length) {
 break;
 }
 }
 return sum * count;
 }
 
 | 
只过了37.5%,感觉有点emmmm,题目中也没有给更多的信息,基本是靠自己猜。
第二题
给定一个字符串,你需要补上一个字符串,使之成为循环的字符串:如ababab就是一个循环字符串。
我直接上手暴力做的,结果直接就过了….
| 12
 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
 
 | public int getMinLen(String str) {
 if (str == null || str.length() == 0) {
 return 0;
 }
 
 int ans = str.length();
 for (int i = 1; i < str.length(); i++) {
 int count = str.length() / i;
 String s = str.substring(0, i);
 
 boolean flag = true;
 for (int j = 1; j < count; j++) {
 String substring = str.substring(j * i, j * i + i);
 if (!substring.equals(s)) {
 flag = false;
 break;
 }
 }
 if (flag) {
 
 
 String last = str.substring(i * count);
 
 if (last.length() == 0) {
 return 0;
 }
 if (s.startsWith(last)) {
 ans = Math.min(ans, s.length() - last.length());
 }
 }
 }
 
 return ans;
 }
 
 | 
第三题
要求算概率。你有两套题目,每套题目都是n题,那么当你有一天发现其中的一套已经做完了,另外一套的数学期望是多少?
我自己用笔算出来是4/5,题目中算出来是7/8,然后就完完全全没思路,因为我后来用计算机模拟概率,也是不对的….