笔者目前正在参加2020春招,这里记录一下2020同花顺春招一面和二面中遇到的编程题,不包含笔试哦(其实是因为我忘了,不过笔试中的编程题还是比较简单的)。
注:笔者编程过程中被要求共享屏幕。
1.1 一面中的编程题
1.2 题干
从一个给定的数组中选出最大的三个数,且不能使用排序算法。(面试官直接给我报了一个数组)
1.3 当时给出的方案
public static void main(String[] args) {
int[] arr = {-1, 10, 29, 194, 65, 78, 3, 15, 156, 180,
-6, 11};
int[] res = new int[3];
int max = Integer.MIN_VALUE;
int index = -1;
//循环三次找到三个最大数
for(int j = 0; j < 3; j++) {
for(int i = 0; i < arr.length; i++) {
if(arr[i] > max) {
max = arr[i];
index = i;
}
}
res[j] = max;
arr[index] = Integer.MIN_VALUE;
max = Integer.MIN_VALUE;
}
//输出
for(int i : res)
System.out.println(i);
}
2.1 二面中的编程题
2.2 题干
将给定的两个有序的数组整合成一个有序数组。(这里假设是递增的数组)
2.3 当时给出的方案
public static int[] mergeLikeSort(int[] arr1, int[] arr2) {
int len1 = arr1.length;
int len2 = arr2.length;
int[] res = new int[len1+len2];
//双指针方案
int l1 = 0; //arr1 指针
int l2 = 0; //arr2 指针
for(int i = 0; i < len1+len2; i++) {
if(l1 < len1 && l2 < len2) { //两个指针都没到头
if(arr1[l1] < arr2[l2]) {
res[i] = arr1[l1];
l1++;
}else {
res[i] = arr2[l2];
l2++;
}
}else if(l1 < len1) { //若l2到头了,l1还没到头
res[i] = arr1[l1];
l1++;
}else if(l2 < len2) { //若l1到头了,l2还没到头
res[i] = arr2[l2];
l2++;
}
}
return res;
}
二面中写完上面这题后,面试官还要求手写一个快速排序算法,大家都十分熟悉,这里就不写出了。
以上。