您的位置:首页 > 职场人生

一道华为面试题

2012-05-17 09:45 211 查看
有两个序列a,b,大小都有n,序列元素的值任意整数,无序;

要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b无素的和]之间的差最小。

例如:

var a = [100, 99, 98, 1, 2, 3];

var b = [1, 2, 3, 4, 5, 40];

package com.tourism;

import java.util.Collections;

import java.util.List;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.google.common.collect.Lists;

public class Test {

protected static Logger logger = LoggerFactory.getLogger(Test.class);

public static void main(String[] args) {

List<Integer> a = Lists.newArrayList(100, 99, 98, 1, 2, 3);

List<Integer> b = Lists.newArrayList(1, 2, 3, 4, 5, 40);

Collections.sort(a);

Collections.sort(b);

int totalA = 0, totalB = 0;

for (int i : a) {

totalA += i;

}

for (int i : b) {

totalB += i;

}

int curDiff = Math.abs(totalA - totalB);

for (int i = a.size() - 1; i >= 0; i--) {

for (int j = b.size() - 1; j >= 0; j--) {

int chgTotalA = totalA - a.get(i) + b.get(j);

int chgTotalB = totalB - b.get(j) + a.get(i);

int chgDiff = Math.abs(chgTotalA - chgTotalB);

if (chgDiff < curDiff) {

curDiff = chgDiff;

totalA = chgTotalA;

totalB = chgTotalB;

int temp = a.get(i);

a.set(i, b.get(j));

b.set(j, temp);

}

}

}

logger.info("a:{}", a);

logger.info("b:{}", b);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: