鱼C论坛

 找回密码
 立即注册
查看: 2694|回复: 14

求解一道面试题

[复制链接]
发表于 2014-3-11 12:30:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我看过这道题已经很多次了,也许看过答案了,但此时看到也往了如何解答,如题:

有A、B两个数组,其大小一样,如
A[n]={23,5,98,57,9,99};
B[n]={45,21,78,55,97,32};
现在可以交换A、B中的元素,使得A、B之间的差异最小。

主要是问算法,解题思路。
(注:本想发起悬赏的,但资金真的是不足啊~~~)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-11 18:35:44 | 显示全部楼层
差异最小值是值sum(A[i]-B[i]),i从0-5的累加最小吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 18:54:08 | 显示全部楼层
本帖最后由 sidfate 于 2014-3-11 18:56 编辑

如何如楼上所说,那么此题思路与下题相同:
给定2个元素相同的字符窜,如str1=“abcde”,str2=“bcdae”,求str1要移动几步编程str2(一次只能移动相邻的两个字符)

你先想下上题的思路是怎么样的,想通了就应该懂了,如果不明白我还有上题的源代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 19:07:05 | 显示全部楼层
麻烦一点!!就是进行双层循环!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-11 19:37:10 | 显示全部楼层

对,差异最小就是这样。
比如说
A={1,2,3}
B={4,5,6}
那么结果是
A={1,4,6}
B={2,3,5}
是一种答案,它们相差为1.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-11 19:38:01 | 显示全部楼层
kaizhiyu 发表于 2014-3-11 19:07
麻烦一点!!就是进行双层循环!!!

说一下思路,如何双层循环?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 20:00:03 | 显示全部楼层
按你这么说不就是把两个数组的所有数(2N个)放一起排个序,然后第i个数放到数组A,第i+1个·数放到数组B中(i从0-N-1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-11 20:11:06 | 显示全部楼层
sidfate 发表于 2014-3-11 20:00
按你这么说不就是把两个数组的所有数(2N个)放一起排个序,然后第i个数放到数组A,第i+1个·数放到数组B中 ...

按你说的,那N+1这个位置上的数没有了?我想你的意思可能是排序后一个放A下一个放B,依次下去,如下面的结果:
A={1,3,5}
B={2,4,6}
但是结果也可能是:
A={1,4,5}
B={2,3,6}

再说我举的那个例子太特殊了,如果是
A={1,2,4}
B={3,5,10}
呢?
i和i+1不一定必须要分开的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 20:25:14 | 显示全部楼层
如果按我的方法
A={1,2,4}
B={3,5,10}
就可以转化为:
A={1,3,5}
B={2,4,10}
这个答案不对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-11 20:29:05 | 显示全部楼层
sidfate 发表于 2014-3-11 20:25
如果按我的方法
A={1,2,4}
B={3,5,10}

你看他们差异:
sum(A)=9
sum(B)=16

它的答案应该是
A={1,2,10}
B={3,4,5}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 20:31:15 | 显示全部楼层
好吧,我理解错题意了,我以为是对应每一位之差累加的最小值,我再想想
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 21:31:21 | 显示全部楼层
思路:
      设两数组所有数(2N个)总和为SUM,要是两数组差值最小(最小为0),最小为0是说明单数组之和为SUM/2,但是很多情况是不等于的,所以我们的目的从2N个数中选出N个数之和最接近于SUM/2。

      如果N数量较小,用枚举法比较容易实现,枚举出的个数可以用排列组合来求,但是N如果很大,枚举法就效率太低,暂时还没有N很大的时候后的思路=  =。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-11 21:38:28 | 显示全部楼层
sidfate 发表于 2014-3-11 21:31
思路:
      设两数组所有数(2N个)总和为SUM,要是两数组差值最小(最小为0),最小为0是说明单数组之和 ...

很好啊。。。网上也有一种方法:
http://blog.sina.com.cn/s/blog_73b8a3f00100wmut.html

你的思路能自己编出来么,这是一个不错的题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 22:15:33 | 显示全部楼层
zheyitian 发表于 2014-3-11 21:38
很好啊。。。网上也有一种方法:
http://blog.sina.com.cn/s/blog_73b8a3f00100wmut.html

我明天写出来我们交流交流!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-12 22:10:33 | 显示全部楼层
之前比赛时有考到这个题,但是没做出来{:7_163:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 01:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表