51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1024|回复: 5
打印 上一主题 下一主题

一个算法问题,同志们看看

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-1-24 12:46:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有两个数组a,b,大小都为n,数组元素的值任意,无序;
要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-1-24 16:23:40 | 只看该作者
把a,b 2数组的元素放到数组3(2n大小) 中进行排序, a 先取最小的,b取次小的, 然后根据a,b已取元素和的大小来决定谁来取剩下元素中最小的。
策略是,已取得的所有元素之和大的来取C中剩下元素中的最小者。如此反复,直到取完。每次都是a,b各取一个。sdlkfj2
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-1-25 22:18:55 | 只看该作者
是一道华为的面试题
for(var i = 0;i<10;i++){
  if(sum(B)<sun(A){ //如果B的和小于A的和则把A最大元素给B
     B[0] = Max(A) // 把A里最大的元素给B
     A.SPLITE(MAX(A))//把这个元素删除
  }else{
     B[I] = MIN(A)//如果B的和大于了A的和则把A最小的元素给B
     A.SPLITE(MIN(A))
  }
}
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-1-26 23:33:05 | 只看该作者
原帖由 JamesGosling 于 2007-1-25 22:18 发表
是一道华为的面试题
for(var i = 0;i<10;i++){
  if(sum(B)<sun(A){ //如果B的和小于A的和则把A最大元素给B
     B = Max(A) // 把A里最大的元素给B
     A.SPLITE(MAX(A))//把这个元素删除
  }else ...


能否请教一下把A中的最大的元素给B,然后删除A中的元素,那B中的元素如何处理?直接被覆盖吗??
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-1-27 09:07:18 | 只看该作者
linkalee,是的,就是覆盖了
关键是从A中把这个元素删除了,A数组中没有给赋值,
好像只是写了一个程序的伪码吧!
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-1-27 16:53:55 | 只看该作者
原帖由 tunglee 于 2007-1-27 09:07 发表
linkalee,是的,就是覆盖了
关键是从A中把这个元素删除了,A数组中没有给赋值,
好像只是写了一个程序的伪码吧!

不太明白,题目要求是A和B的元素互换啊。能否说清楚一些啊。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-30 09:16 , Processed in 0.070045 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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