小米2013校园招聘笔试题

小米2013校园招聘笔试题_第1张图片

先说下大概思路:用一个List<int[]>来存放每个圈子的好友,然后对集合进行循环判断..如果r数组中的数在List中存在的话就修改List中的数组,把r数组中另一个数添加进数组中,不存在则List.Add(),最后输出List.size()得出圈子数

但是感觉效率不怎么高,下面上代码

public static void main(String[] args) {
		int[][] mArr = new int[][] { { 1, 2 }, { 2, 3 }, { 2, 4 }, { 4, 5 },
				{ 6, 7 }, { 7, 8 } };
		List<int[]> mList = new ArrayList<int[]>();
		for (int i = 0; i < mArr.length; i++) {
			if (i != 0) {
				boolean flag = false;
				for (int j = 0; j < mList.size(); j++) {
					for (int m = 0; m < mList.get(j).length; m++) {
						if (mArr[i][0] == mList.get(j)[m]) {
							flag = true;
							int[] tempArr = new int[mList.get(j).length + 1];
							for (int k = 0; k < mList.get(j).length + 1; k++) {
								if (k < mList.get(j).length) {
									tempArr[k] = mList.get(j)[k];
								} else {
									tempArr[k] = mArr[i][1];
								}
							}
							mList.set(j, tempArr);
						}
					}
					if (!flag) {
						for (int m = 0; m < mList.get(j).length; m++) {
							if (mArr[i][1] == mList.get(j)[m]) {
								flag = true;
								int[] tempArr = new int[mList.get(j).length + 1];
								for (int k = 0; k < mList.get(j).length + 1; k++) {
									if (k < mList.get(j).length) {
										tempArr[k] = mList.get(j)[k];
									} else {
										tempArr[k] = mArr[i][0];
									}
								}
								mList.set(j, tempArr);
							}
						}
					}
				}
				if (!flag) {
					mList.add(mArr[i]);
				}
			} else {
				mList.add(mArr[i]);
			}
		}
		for (int i = 0; i < mList.size(); i++) {
			for (int j = 0; j < mList.get(i).length; j++) {
				System.out.println(i + "----" + mList.get(i)[j]);
			}
		}
		System.out.println(mList.size());
	}

下面这个是整合成一个方法的,就是把数组索引的0和1单拎出来

private static int[][] mArr = new int[][] { { 1, 2 }, { 2, 3 }, { 2, 4 },
			{ 4, 5 }, { 6, 7 }, { 7, 8 } };
	private static List<int[]> mList = new ArrayList<int[]>();
	// 朋友圈
	public static void main(String[] args) {

		for (int i = 0; i < mArr.length; i++) {
			if (i != 0) {
				boolean flag = false;
				for (int j = 0; j < mList.size(); j++) {
					flag = x(i, j, 0, 1);
					if (!flag) {
						x(i, j, 1, 0);
					}
				}
				if (!flag) {
					mList.add(mArr[i]);
				}
			} else {
				mList.add(mArr[i]);
			}
		}
		for (int i = 0; i < mList.size(); i++) {
			for (int j = 0; j < mList.get(i).length; j++) {
				System.out.println(i + "----" + mList.get(i)[j]);
			}
		}
		System.out.println(mList.size());
	}
	//indexA,indexB为mArr中的1维数组的索引,即不是0就是1;
	public static boolean x(int i, int j, int indexA, int indexB) {
		for (int m = 0; m < mList.get(j).length; m++) {
			if (mArr[i][indexA] == mList.get(j)[m]) {
				int[] tempArr = new int[mList.get(j).length + 1];
				for (int k = 0; k < mList.get(j).length + 1; k++) {
					if (k < mList.get(j).length) {
						tempArr[k] = mList.get(j)[k];
					} else {
						tempArr[k] = mArr[i][indexB];
					}
				}
				mList.set(j, tempArr);
				return true;
			}
		}
		return false;
	}
运行结果

小米2013校园招聘笔试题_第2张图片


题目2:一个数组里,除了三个数是唯一出现的,其余的都出现偶数个,找出这三个数中的任一个。比如数组元素为【1, 2, 4, 5, 6, 4, 2】,只有1,5,6这三个数字是唯一出现的

思路:这个感觉比较简单,使用一个Hash把数组元素的值作为Key,如果这个Key里有值则把value赋给1否则给0,最后迭代Hash中value为0的就是不重复的数

public static void main(String[] args) {
		int[] mArr = new int[] { 1, 2, 4, 5, 6, 4, 2 };
		Map<Integer, Integer> mHash = new HashMap<Integer, Integer>();
		for (int i = 0; i < mArr.length; i++) {
			if (mHash.get(mArr[i]) == null) {
				mHash.put(mArr[i], 0);
			} else {
				mHash.put(mArr[i], 1);
			}
		}
		for (Map.Entry<Integer, Integer> m : mHash.entrySet()) {
			if (m.getValue() == 0) {
				System.out.println(m.getKey());
			}
		}
	}


你可能感兴趣的:(面试,招聘,笔试题,朋友圈)