论坛首页 综合技术论坛

[Python]华为面试题,交换两个数组的元素使之总和的差值最小。

浏览 23948 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (3) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-07-28   最后修改:2011-07-28
神之小丑 写道
flysunmicro 写道
合并,排序


按照合并 排序后我写了个。因为排序算法很多,所以就没写。归并排序应该就可以
public void mergeSort(int[] array1,int[] array2){
		/*
		 * 这里将这两个数组合并排序成一个数组
		 * 这里就省略
		 */
		int[] array=new int[array1.length+array2.length];
		
		for(int i=0;i<array1.length;i++){
			array[i]=array1[i];
			array[i+array1.length]=array2[i];
		}
		
		System.out.println("合并数组array:");
		for(int i:array)
			System.out.print(i+"\t");
		System.out.println();
		sumResolve(array,array1,array2);
	}
	
	private void sumResolve(int[] array,int[] array1,int[] array2){
		
		array1[0]=array[array.length-1];
		array2[0]=array[array.length-2];
		int array1Sum=array1[0];
		int array2Sum=array2[0];
		int index1=1;
		int index2=1;
		for(int i=array.length-3;i>=0;i--){
			if(array1Sum>=array2Sum&&index2<array2.length){
				array2[index2]=array[i];				
				array2Sum+=array2[index2];
				index2++;
				}else if(index1<array1.length){
				array1[index1]=array[i];
				array1Sum+=array1[index1];
				index1++;
				
			}		
			
		}
		
		
		System.out.println("数组array1:");
		for(int j:array1)
			System.out.print(j+"\t");
		System.out.print("和为:"+array1Sum);
		System.out.println();
		
		System.out.println("数组array2:");
		for(int j:array2)
			System.out.print(j+"\t");
		System.out.print("和为:"+array2Sum);
		System.out.println();
	}

int[] arr1 = { 1, 2, 3, 4, 5, 11,12 };
int[] arr2 = { 13, 14, 15,100,100,101, 170 }; 
mergeSort(arr1, arr2);

outoutPut:
合并数组array:
1	2	3	4	5	11	12	13	14	15	100	100	101	170	
数组array1:
170	100	5	4	3	2	1	和为:285
数组array2:
101	100	15	14	13	12	11	和为:266


感觉这也没什么问题,只要改进算法,考虑两个数组不一样长就可以了。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics