`
gaofen100
  • 浏览: 1190518 次
文章分类
社区版块
存档分类
最新评论

交换序列a,b中的元素,使|sum(a)-sum(b)|最小。

 
阅读更多
有两个序列a,b,大小都为n,序列元素的值任意整数,无序.

要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
例如:
int[] a = {100,99,98,1,2, 3};
int[] b = {1, 2, 3, 4,5,40};

求解思路:
当前数组a和数组b的和之差为
A = sum(a) - sum(b)
a的第i个元素和b的第j个元素交换后,a和b的和之差为
A' = sum(a) - a[i] + b[j] - (sum(b) - b[j] + a[i])
= sum(a) - sum(b) - 2 (a[i] - b[j])
= A - 2 (a[i] - b[j])
设x = a[i] - b[j], 则交换后差值变为 A’ = A - 2x

假设A > 0, 当x 在 (0,A)之间时,做这样的交换才能使得交换后的a和b的和之差变小,x越接近A/2效果越好,
如果找不到在(0,A)之间的x,则当前的a和b就是答案。
所以算法大概如下:

在a和b中寻找使得x在(0,A)之间并且最接近A/2的i和j,交换相应的i和j元素,重新计算A后,重复前面的步骤直至找不到(0,A)之间的x为止。



参考:http://blog.csdn.net/v_july_v/article/details/6419466

分享到:
评论

相关推荐

    微软面试100系列 第32题解答

    要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。 例如: var a=[100,99,98,1,2, 3]; var b=[1, 2, 3, 4,5,40]; 求解思路: 当前数组a和数组b的和之差为 A = sum(a) - sum(b) a的...

    西工大noj答案完整版.doc

    2.A+B 3.A+BⅡ 4.AB 5.ACKERMAN 6.Arithmetic Progressions 7.Bee 8.Checksum algorithm 9.Coin Test 10.Dexter need help 11.Double 12.Easy problem 13.Favorite number 14.Graveyard 15.Hailstone 16.Hanoi Ⅱ 17...

    数据结构(C++)有关练习题

    D. *建立函数create:根据一维数组a[n]建立一个单链表,使单链表中各元素的次序与a[n]中各元素的次序相同,要求该程序的时间复杂度为O(n)。 E. *整理函数tideup:在非递减有序的单链表中删除值相同的多余...

    最新JAVA编程题全集_50题及答案

    写一个函数,例如:给你的 a b c 则输出 abc acb bac bca cab cba import java.util.ArrayList; import java.util.List; public class NumTest { public static void main(String[] args) { String s="ABCD";...

    《数据结构 1800题》

    10. 在顺序存储结构中,有时也存储数据结构中元素之间的关系。( )【华南理工大学 2002 一、2 (1分)】 11. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( )【上海海运学院 1999 一、1(1分)】 12....

    java 经典习题.doc

    1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 【程序7】 题目:输入一行字符,分别统计出其中英文字母、...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。  拉里•埃里森  就业前景 从就业与择业的...

    C++ STL 开发技术导引(第6章)

    23.25 最小元素min_element 403 23.26 最大元素max_element 404 23.27 字典比较lexicographical_compare 405 23.28 下一排列组合next_permutation 406 23.29 上一排列组合prev_permutation 409 23.30 本...

    C++ STL开发技术导引(第5章)

    23.25 最小元素min_element 403 23.26 最大元素max_element 404 23.27 字典比较lexicographical_compare 405 23.28 下一排列组合next_permutation 406 23.29 上一排列组合prev_permutation 409 23.30 本...

    C++ STL开发技术导引(第3章)

    23.25 最小元素min_element 403 23.26 最大元素max_element 404 23.27 字典比较lexicographical_compare 405 23.28 下一排列组合next_permutation 406 23.29 上一排列组合prev_permutation 409 23.30 本...

    leetcode:LeetCode问题的解决方案

    在所有行中查找最小的公共元素 1165 简单 单排键盘 1136 中等的 平行课程 993 简单 表兄弟在二叉树中 966 中等的 Vower拼写检查器 916 中等的 词子集 870 中等的 优势洗牌 869 中等的 重新排序的2的幂 841 ...

    C#编程经验技巧宝典

    106 <br>0175 如何检索指定条件数组中的元素 107 <br>0176 如何动态改变数组长度 108 <br>0177 如何反转数组中元素的顺序 108 <br>0178 如何排序数组中的元素的顺序 109 <br>0179 如何创建...

Global site tag (gtag.js) - Google Analytics