查看: 4206| 回复: 12
跳转到指定楼层
上一主题 下一主题
收起左侧

问大家一个问题, find the kth number in two sorted array

全局:

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

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

x
find the kth number in two sorted array

log(n)的解法有木有, 真不知道啊

上一篇:google: sum of square
下一篇:判断链表是否有环
🔗
tzunami 2011-11-9 15:13:04 | 只看该作者
全局:
lg(n)*lg(n)的行不行?
回复

使用道具 举报

🔗
tzunami 2011-11-9 15:28:15 | 只看该作者
全局:
确切说是log(k)*log(k)的....
回复

使用道具 举报

🔗
 楼主| wwwyhx 2011-11-9 16:14:07 | 只看该作者
全局:
确切说是log(k)*log(k)的....
tzunami 发表于 2011-11-9 15:28



    log(k)*log(k)怎么做??
回复

使用道具 举报

🔗
tzunami 2011-11-9 16:32:11 | 只看该作者
全局:
等下,有点不严密,我再想想 ...
回复

使用道具 举报

🔗
tzunami 2011-11-9 16:38:34 | 只看该作者
全局:
哦,就是这样,先在第一个数组中用选定一个元素,要下标小于K,然后用二分法在第二个数组中选一个刚好比这个元素小的(还得再选一次大的,常熟加1),在看第一个数组中选定元素之前的元素个数加上第二个数组中搜出的元素之前的个数之和是比K大还是小,要是一样就OK了,要是大,就用二分法在第一个数组中用二分法选择比第一次选择还小的,依次类推,这样就是lgk*lgk了
回复

使用道具 举报

🔗
 楼主| wwwyhx 2011-11-9 17:28:26 | 只看该作者
全局:
哦,就是这样,先在第一个数组中用选定一个元素,要下标小于K,然后用二分法在第二个数组中选一个刚好比这个元素小的(还得再选一次大的,常熟加1),在看第一个数组中选定元素之前的元素个数加上第二个数组中搜出的元素之前的个数之和是比K大还是小,要是一样就OK了,要是大,就用二分法在第一个数组中用二分法选择比第一次选择还小的,依次类推,这样就是lgk*lgk了
tzunami 发表于 2011-11-9 16:38


很好, 谢谢
具体逻辑上如果第k个在第二个数组上怎么处理? 做两遍吗??
回复

使用道具 举报

🔗
tzunami 2011-11-9 17:32:57 | 只看该作者
全局:
做2遍,所以说常数要加1
回复

使用道具 举报

🔗
darksteel 2011-11-10 01:37:31 | 只看该作者
全局:
找中位数的我在网上见过O(logn)的做法
回复

使用道具 举报

全局:
两个数列a,b各自取前k个数 就是a[k],b[k]
比较a[k/2]和b[k/2]
如果前者大,kth数不可能在a[k/2]...a[k]之间,也不可能在b[0]...b[k/2]之间
排除掉这两个子列之后问题归结为在a[0]..a[k/2]和b[k/2]..b[k]之间寻找第k/2个数
所以是个递归算法
rate在log(k)
回复

使用道具 举报

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

本版积分规则

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