同花顺2020春招一面二面在线编程题

笔者目前正在参加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;
}

二面中写完上面这题后,面试官还要求手写一个快速排序算法,大家都十分熟悉,这里就不写出了。

以上。

发布了5 篇原创文章 · 获赞 5 · 访问量 348

猜你喜欢

转载自blog.csdn.net/awkwarddancebeginner/article/details/105231572