package cn.cat.test;
import java.util.Arrays;
public class Test {
/** 8 分鐘寫出代碼(華爲筆試題)
* @Description:
* @author gwj
* @Created 2017年9月7日 下午2:00:55
* @param args
*/
public static void main(String[] args) {
int[] a = new int[]{1,2,3,4,5};
int[] b = new int[]{6,7,8,9,10};
int arrLen = a.length;
int[] ab = new int[arrLen * 2];
//合併兩個數組
for (int i = 0, len = arrLen; i < len; i++) {
ab[i] = a[i];
ab[len + i] = b[i];
}
//排序數組
Arrays.sort(ab);
int aIndex = 0;
int aMax = 0;
int bIndex = 0;
int bMax = 0;
for (int i = ab.length - 1; i >= 0; i--) {
int temp = ab[i];
//如果數組A被填滿,或者是數組B還未開始添加數據,則均填入B數組中。
if (aIndex >= arrLen || bIndex == 0) {
b[bIndex++] = temp;
bMax += temp;
continue;
}
//如果數組B被填滿,或者是數組A還未開始添加數據,則均填入A數組中。
if (bIndex >= arrLen || aIndex == 0) {
a[aIndex++] = temp;
aMax += temp;
continue;
}
//根據比較來判斷數值放入哪個組中。
if ((aMax + temp) > (bMax + temp)) {
b[bIndex++] = temp;
bMax += temp;
} else {
a[aIndex++] = temp;
aMax += temp;
}
}
//打印數組元素和總和值
System.out.println(Arrays.toString(a) + " sum=" + aMax);
System.out.println(Arrays.toString(b) + " sum=" + bMax);
}
}
8 分鐘寫出代碼(華爲筆試題)
題目:
有兩個數組a,b,大小都爲n,數組元素的值任意,無序;
要求:
通過交換a,b中的元素,使數組a元素的和與數組b元素的和之間的差最小。8分鐘寫出代碼!
題目:
有兩個數組a,b,大小都爲n,數組元素的值任意,無序;
要求:
通過交換a,b中的元素,使數組a元素的和與數組b元素的和之間的差最小。8分鐘寫出代碼!