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

一道算法题:华为面试题

2014-02-11 15:59 357 查看
http://bbs.chinaunix.net/thread-855126-1-1.html

有两个数组a,b,大小都为n,数组元素的值任意,无序;

要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小

我们假设有数据:

a: 6 20 100

b: 19 20 70

在网站上看到有如下解法:

解法 1,

把a,b 2数组的元素放到数组3(2n大小) 中进行排序,

a 先取最小的,b先取次小的,

然后根据a,b已取元素和的大小来决定谁来取剩下元素中最小的。策略是,

已取得的所有元素之和大的来取C中剩下元素中的最小者。如此反复,直到取完。每次都是a,b各取一个。
按该方法:

则结果为:

a: 6 50 100

b: 19 40 70

差值为:27.

解法2.





按此种方案,则:

a: 6 40 100

b: 19 50 70

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