cvte2019秋招面试编程题

package package_20180720;

/**
 * 
 * @author 康茜
 *	合并两个有序数组交(从大到小排序)
 *
 *	分析:合并两个有序数组,这里的关键点在于有序,如果是平常的合并数组的话,我们只需要用for循环将两个数组中的元素加入到一个数组中,
 *然后再对这个新数组进行排序(排序方式有很多中,选择合适的就行);但是现在我们多了一个条件 “有序”,即两个子数组中的元素是排好顺序的,
 *那么我们如果将它安照无序的状态进行处理的话,会使程序的性能下降。
 *现在来分析一下新思路:既然两个数组有序,那么我们可以比较两个数组的首元素,将首元素较大的放入新数组,然后移动指向子数组的指针,使其指向
 *该数组的下一个元素。下面我用程序实现这一思路。
 */
public class Main2 {
	/**
	 * 
	 * @param ary1 有序子数组1
	 * @param ary2 有序子数组2
	 * @return 合并之后的数组
	 */
	public static int[] merge(int[] ary1, int[] ary2) {
		int[] result = new int[ary1.length + ary2.length];
		
		int i = 0;//子数组1的下标
		int j = 0;//子数组2的下标
		int k = 0;//合并数组的下标
		
		//通过while循环先将一个子数组给全部放入新数组中
		while(i < ary1.length && j < ary2.length) {
			//通过这个if判断将有序数组从大到小或从小到大排序
			if(ary1[i] > ary2[j]) {
				result[k++] = ary1[i];
				i++;
			} else {
				result[k++] = ary2[j];
				j++;
			}
		}
		
		//根据下标将剩余部分的数组按照顺序依次复制到新数组中
		while(i < ary1.length) {
			result[k++] = ary1[i++];
		}
		while(j < ary2.length) {
			result[k++] = ary2[j++];
		}

		return result;
	}
	
	public static void main(String[] args) {
		int[] ary1 = {99, 92, 87, 80};
		int[] ary2 = {98, 90, 82};
//		int[] ary3 = {1, 2, 3, 4};
//		int[] ary4 = {2, 5, 7};
		
		int[] ary = merge(ary1, ary2);
		for(int i = 0; i < ary.length; i++) {
			System.out.print(ary[i] + "  ");
		}
	}
}
package package_20180720;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 
 * @author 康茜
 * 	ID生成器:
 * 题目描述:要求每次生成一个不重复的长度为4的字符串,该字符串由字符0~9,a~z,A~Z组成,
 * 需要实现一个生成ID 的方法及一个返回当前生成ID总数的方法。
 *
 */
public class Main3 {
	private static String sourceString;
	private static int length;
	private static List<String> list;
	private static int num;
	private static Random random;
	static {
		sourceString = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
		length = sourceString.length();
		list = new ArrayList<>();
		num = 0;
		random = new Random();
	}
	
	/**
	 * 生成一个长度为4的id
	 * @return ID
	 */
	public static String generate() {
		StringBuffer result = new StringBuffer();
		for(int i = 0; i < 4; i++) {
			int index = random.nextInt(length);//返回一个大于等于0,小于length的整数
			char ch = sourceString.charAt(index);
			result.append(ch);
		}
		if(list.contains(result.toString())) {
			System.out.println("当前生成的字符串与之前重复,重新生成……");
			return generate();
		} else {
			list.add(result.toString());
			num++;
			return result.toString();
		}
	}
	
	public static int getNum() {
		return num;
	}
	
	public static void main(String[] args) {
		System.out.println(generate());
		System.out.println(generate());
		System.out.println(generate());
	
		System.out.println(getNum());
	}
}

猜你喜欢

转载自blog.csdn.net/kangxidagege/article/details/81283164