您的位置:首页 > 其它

小米2013校园招聘笔试题

2013-09-25 15:22 465 查看


先说下大概思路:用一个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;
}

运行结果



题目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());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: