8 分鐘寫出代碼(華爲筆試題)

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分鐘寫出代碼!



java版本的代碼實現:

題目:


有兩個數組a,b,大小都爲n,數組元素的值任意,無序;


要求:


通過交換a,b中的元素,使數組a元素的和與數組b元素的和之間的差最小。8分鐘寫出代碼!

發佈了48 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章