分享一路华为面试题
分享一道华为面试题有两个序列a,b,大小都有n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序
分享一道华为面试题
有两个序列a,b,大小都有n,序列元素的值任意整数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b无素的和]之间的差最小。
例如:
var a = [100, 99, 98, 1, 2, 3];
var b = [1, 2, 3, 4, 5, 40];
[解决办法]
第一步排序
然后求出中间值
然后从1到n/2个数中遍历,替换对应的数据使结果接近中间值,一旦有替换重新遍历
[100, 99, 98, 1, 2, 3];
[1, 2, 3, 4, 5, 40];
第一步40换100(实际上这题本身从小换更简单,不过为求一般从大换起),重新遍历,5换40,重新遍历 然后4换5,3换4,2换3,1换3,由于例子比较简单,以后2个和3个的遍历均无法接近,因此结束
[解决办法]
[解决办法]1、将2n个数累计求和,得到totel_2n
2、排列组合将其中n个数取出,求累计totel_n,找到最接近totel_2n/2的组合,小于等于1就是答案,可返回。如果不是,则记录下最小的差异,继续遍历。
3、取数过程中,如果累计和已经大于totel_2n/2,换数进行下一轮组合,继续遍历。
4、遍历完后,结果要么是最小的差异,要么是0或者1的差异。
[解决办法]