调整数组使得差最小

调整数组使差最小
Description
有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序; 要求:通过交换 a,b 中的元素,使[序列 a 元素的和]与[序列 b 元素的和]之间的差最小。

Input
输入第一行为用例个数, 每个测试用例输入为两行,分别为两个数组,每个值用空格隔开。

Output
输出变化之后的两个数组内元素和的差绝对值。

Sample Input 1
1
100 99 98 1 2 3
1 2 3 4 5 40

Sample Output 1
48

编码思路

  1. 通过交换a,b中的元素使得之间差值最小,由于无法确定交换个数,所以需要尝试每次交换的个数
  2. 当然只需要从1尝试 num/2就一样 因为 C61=C65。也就是说在数组有6个数的情况下,交换一个数和交换5个数的情况是一样的
  3. 比如交换数为2.本次没有列出在选出2个数的情况,而是直接算出两个数的值
  4. 想让差最小 举个例子
    数组1 arr1=[…,…,…]
    数组2 arr2=[…,…,…]
    sum(arr1)-sum(arr2)=cha
    此时交换数为2
    arr1 找出两个数 a1,a2 a1+a2=A
    arr2找出两个数 b1,b2 b1+b2=B
    在交换后 最新的差值 为 sum(arr1)-A+B -(sum(arr2)—B+A)=cha-2(A-B)让这个值的绝对值最小即可

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class k8 {
   

	
	/*
	 * 1
100 99 98 1 2 3
1 2 3 4 5 40                         48
	 */
	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
//		Scanner sc=new Scanner(System.in);
//		int times = Integer.parseInt(sc.nextLine());
//		while(times>0) {
   
//			
//			String fir=sc.nextLine();
//			String sec=sc.nextLine();
//			String[] firArr=fir.split(" ");
//			String[] secArr=sec.split(" ");
//			int[] arr1=new int[firArr.length];
//			int[] arr2=new int[secArr.length];
//			for(int i=0;i<arr1.length;i++) {
   
//				arr1[i]=Integer.parseInt(firArr[i]);
//			}
//			for(int i=0;i<arr2.length;i++) {
   
//				arr2[i]=Integer.parseInt(secArr[i]);
//			}
//			
//			minCha(arr1,arr2);
//			times--;
//		}
		
		int[] arr1= {
   1,3,4,5};
		int[] arr2= {
   8,9,19,21};
		minCha(arr1,arr2);
		
		
	}
	//找出最终结果
	public static void minCha(int[]arr1,int []arr2) {
   
		
		//分别算出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值