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

请教一个二分法的题

全局:

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

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

x
本帖最后由 comicrudy 于 2016-5-31 00:03 编辑

之前google面经里有的关于majority element的题,就是一个排序数组有n个值,求所有出现次数等于或者超过n / k的值。
比如[1 1 2 2 2 2 3 4 5 5 5 5]
k = 3
return [2,5]

知道是应该用binary search做,但是具体逻辑搞不太明白啊?


上一篇:请教一道题
下一篇:Leetcode287. Find the Duplicate Number Follow up
全局:
首先,target 只能是 n / k, 2n/k, ... ,(n - k) / k, 然后你对每一个target进行一次二分查找就好了,二分查找就是找最左边是这个数的(比如index1),最右边是这个数的(index2), 然后你用index2 - index1 看是不是符合题目要求了,把所有符合要求的都放在结果里面就好了。复杂度应该是 k*logN 吧?
回复

使用道具 举报

🔗
jy_121 2016-5-30 12:54:15 | 只看该作者
全局:
根据题意,满足条件的点只可能出现在n/k,2n/k....,n  对这几个点用二分法求range,看看个数是否大于n/k.
回复

使用道具 举报

🔗
 楼主| comicrudy 2016-5-30 13:48:17 | 只看该作者
全局:
jy_121 发表于 2016-5-30 12:54
根据题意,满足条件的点只可能出现在n/k,2n/k....,n  对这几个点用二分法求range,看看个数是否大于n/k.

能具体讲一讲怎么求range么?需要先比较n/k, 2n/k么?
回复

使用道具 举报

🔗
jy_121 2016-5-30 14:04:14 | 只看该作者
全局:
comicrudy 发表于 2016-5-30 13:48
能具体讲一讲怎么求range么?需要先比较n/k, 2n/k么?

你去做下leetcode的search for range就知道了
回复

使用道具 举报

🔗
 楼主| comicrudy 2016-5-30 15:04:10 | 只看该作者
全局:
jy_121 发表于 2016-5-30 14:04
你去做下leetcode的search for range就知道了

应该可以剪枝吧?不需要对每一个值都找完range。
回复

使用道具 举报

无效楼层,该帖已经被删除
🔗
blackrose 2016-5-30 23:23:16 | 只看该作者
全局:
维护一个K window,对这个K window 内的数求 one majority element?
回复

使用道具 举报

🔗
南方Giraffe 2016-5-31 01:07:01 | 只看该作者
全局:
不懂用binary search怎么做 不过lc easy里面有道差不多的 不过k固定是2 我直接遍历数组存hashmap里了....虽然很慢...等大神回复....
回复

使用道具 举报

🔗
南方Giraffe 2016-5-31 01:12:34 | 只看该作者
全局:
一个想法是:因为这个数组是排了序的 所以符合条件的数只可能在n/k n/2k...的位置上 因此只需要把这些位置的数前后出现次数加起来...
回复

使用道具 举报

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

本版积分规则

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