华为面试题

[复制链接]
 楼主| 秋天落叶 发表于 2012-5-12 09:33 | 显示全部楼层 |阅读模式
有两个序列a,b,大小都有n,序列元素的值任意整数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b无素的和]之间的差最小。
例如:  
var a = [100, 99, 98, 1, 2, 3];
var b = [1, 2, 3, 4, 5, 40];
txcy 发表于 2012-5-12 09:55 | 显示全部楼层
给个思路:
1、两数组A和B归并为一个排好序的数组C
2、清空A和B
3、从C中每次取两个元素分别放入A和B

取数原则:
1、取第一个和最后一个放入A
2、取第二个和倒数第二个放入B
3、依此类推
4、若取到最后只剩两个数了,计算A的和与B的和,将大的放入‘和’较小的数组,小的放入‘和’较大的数组
dfsa 发表于 2012-5-12 09:58 | 显示全部楼层
先将两个数组快排得到:
1,2,3,98,99,100
1,2,3,4,5,40
然后归并成一个数组c:
1, 1, 2, 2, 3, 3, 4, 5, 40, 98, 99, 100
然后从c中按顺序取值分别给数组a和b,同时注意,如果上次a分到了一个较大的数,那么下次就给它分配一个小一点的数,反之亦然。
火箭球迷 发表于 2012-5-12 19:30 | 显示全部楼层
LS上的思路可行,题目不难
无冕之王 发表于 2012-5-13 11:24 | 显示全部楼层
2,3楼的思路都可以借鉴
陈阳 发表于 2012-5-17 20:56 | 显示全部楼层
我觉得不能合成一个数组,题目说了,是交换元素。
应该,A,B数据进行排序。
排序完成后,再进行大小比较,从大到小,一个一个比较,再进行交换。
yybj 发表于 2012-5-17 22:10 | 显示全部楼层
这个是什么岗位的面试题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:落叶很美

138

主题

3044

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部