📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
查看: 2575| 回复: 6
跳转到指定楼层
上一主题 下一主题
收起左侧

Google : 找中数

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
两个大小相同的排好序的数组,A和B,如何找出两个数组的中数

上一篇:career cup top150 questions, 4th ed.
下一篇:Anonymous : 求数组中元素为另外两个元素和的最大元素
🔗
yxyxyx 2011-5-14 22:29:10 | 只看该作者
全局:
基本和两个排好序的数组合成一个大数组的步骤类似吧,甚至还要简单一点(amax<bmin的时候直接拿来计算就好了,反之亦然)。只不过在第n步的时候(假设一个数组长度为n)停止就好了,另外需要记录第n大的和第n+1大的数。
如果两个数组都是从小到大排的那就是:

float result;
if(a[n] < b[0]) result =(a[n]+b[0])/2;
else if(a[0]>b[n]) result=(a[0]+b[n])/2;
else
{
int ia=0,ib=0;
for(int t=0; t < n; t++)
{
        if(a[ia] < b[ib])  ia++;
        else                   ib++;
}
result =(a[ia]+b[ib])/2;
}
回复

使用道具 举报

🔗
bill 2011-5-15 01:17:49 | 只看该作者
全局:
O(n)。 每次对半分,看哪半多哪半少,然后变更问题(如找第x大数)继续递归。
回复

使用道具 举报

🔗
 楼主| wwwyhx 2011-5-15 02:28:27 | 只看该作者
全局:
找中数,不是平均数。

提示,谁给个O(logn)的解法,合并数组太简单了
回复

使用道具 举报

🔗
darksteel 2011-5-15 06:10:42 | 只看该作者
全局:
回复 4# wwwyhx
我只能想到(logn)^2的。用二分在A中枚举,对每个值在B里二分找它的位置(找lower_bound),然后根据该元素在整个A和B中所处的位置调整二分的区间
回复

使用道具 举报

🔗
 楼主| wwwyhx 2011-5-15 10:52:44 | 只看该作者
全局:
有个性质是A,B合并后的中数是分布在A的中数和B的中数之间,也就是说可以不停的取中数调整大小,每次A排除一半,B排除一半就可以做到logn,这个解法我也没做出来,参考别人的
回复

使用道具 举报

🔗
darksteel 2011-5-15 12:45:40 | 只看该作者
全局:
回复 6# wwwyhx
仔细想想还真是,很巧妙的方法~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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