免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: forrestgang
打印 上一主题 下一主题

华为面试题(8分钟写出代码) [复制链接]

论坛徽章:
0
271 [报告]
发表于 2009-07-23 15:47 |只看该作者
原帖由 yuxh 于 2006-11-13 20:20 发表

这个基本可行,但不是交叉存放较大元素,而是哪边的和小就一直放大元素,直到n,然后把剩下的扔到另一组中就ok了。

这个不保证找出的是最优解,可以交叉之后再做局部调整

论坛徽章:
0
272 [报告]
发表于 2009-07-23 21:24 |只看该作者
下意识就是DP
但8分钟绝对遍不好

论坛徽章:
0
273 [报告]
发表于 2009-07-23 21:31 |只看该作者
背包变形

论坛徽章:
0
274 [报告]
发表于 2010-07-27 11:06 |只看该作者
顶一下这个强帖,到现在还没看完

论坛徽章:
0
275 [报告]
发表于 2010-07-27 14:21 |只看该作者
回复 1# forrestgang


    先对a,b排序,再计算a,b的和sum,除以2,对排好序的a,b做归并
时间复杂度是N*Log(N)
之后取与 sum/2N最接近的值,可以是有折半查找,取一个值后,下一次取(sum-x)/2N-1,一次类推,
复杂度没考虑,应该是在N*Log(N) 之上,则得到的数组与sum/2查找最小,那么 剩下的数组与均值的差别也最小
总复杂的应高于N*log(N)

论坛徽章:
0
276 [报告]
发表于 2010-07-31 22:43 |只看该作者
不但考程序,还考算法,还有数学了,数学学的不好。

论坛徽章:
0
277 [报告]
发表于 2010-07-31 22:51 |只看该作者
排完序挨个放不行吧。

论坛徽章:
0
278 [报告]
发表于 2010-07-31 23:23 |只看该作者
数组A和B,和分别为S1, S2 且 S1 > S2
让 d=S1-S2

A[m]-B[n]=dd
如果交换A[m]和b[n],则S1-S2=d-2*dd

让这个值d-2*dd趋于零即可

于是在数组中找寻让这个值趋于零的交换元素(1个或N个)。这就成了动态规划的问题了。

论坛徽章:
0
279 [报告]
发表于 2010-07-31 23:23 |只看该作者
想出个差不多的,先取出全部排序,a0放最大的c0,b0放次大的c1,然后算a0-b0是否大于c2,
大的话c2放b,否则放a,再算suma-sumb是否大于c3,是的话c3放b,否则放a,直到先把b放满,
剩下的就全放a中。

论坛徽章:
0
280 [报告]
发表于 2010-07-31 23:25 |只看该作者
具体代码,改天试试,大概应该可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP