楼主: Vyronas
跳转到指定楼层
上一主题 下一主题
收起左侧

谷歌 店面面经

🔗
 楼主| Vyronas 2019-10-10 04:56:58 | 只看该作者
全局:
digdig 发表于 2019-10-10 04:54
这题应该还有附加条件的吧?比如这棵树从上至下从左往右都是递增的。如果符合这个条件倒是有log的解法,就 ...

如果已经找到了层数,可以详细说说怎么找到元素吗?因为我认为没法跳过之前层的元素直接找到这一层中的所有元素。。。
今天的米都加完了 明天给你加~谢谢!
回复

使用道具 举报

🔗
Celine00 2019-10-10 04:57:04 | 只看该作者
全局:
Vyronas 发表于 2019-10-10 04:50
如果把当前层里的数存一个vector,就需要它上一层的所有node,上一层又需要上上一层。。。这样又相当于遍 ...

你可以看看李口222 complete tree, 用双层嵌套的binary search,时间复杂度是O(d^2),d是node所在的层数。
回复

使用道具 举报

🔗
 楼主| Vyronas 2019-10-10 04:58:46 | 只看该作者
全局:
本帖最后由 Vyronas 于 2019-10-10 05:00 编辑
a289206397 发表于 2019-10-10 04:46
这样确实是O(n),刚刚想了一下。可以把

面试官让我优化成比O(n)小 我也很绝望啊。。。如果worst case还是O(n) 那求level似乎也没什么意义
回复

使用道具 举报

🔗
digdig 2019-10-10 05:07:07 | 只看该作者
全局:
Vyronas 发表于 2019-10-10 04:56
如果已经找到了层数,可以详细说说怎么找到元素吗?因为我认为没法跳过之前层的元素直接找到这一层中的所 ...

比如找99,已知在第4层

那么从1开始,找右子树的第4层最小值(从右孩子还是一直往左走2层)80,99>80,1走右孩子到4.
在从4找找右子树的第4层最小值(从右孩子还是一直往左走1层)120,99<120,从4走到12

这样时间是O(d^2), d=O(log n)

评分

参与人数 3大米 +4 收起 理由
Vyronas + 1 给你点个赞!
showton + 2 欢迎分享你知道的情况,会给更多积分奖励!
chohan + 1 感谢!!

查看全部评分

回复

使用道具 举报

🔗
chohan 2019-10-10 05:11:20 | 只看该作者
全局:
楼上各位是怎么做到在树的某一层做二分查找的???
回复

使用道具 举报

🔗
 楼主| Vyronas 2019-10-10 05:26:05 | 只看该作者
全局:
digdig 发表于 2019-10-10 05:07
比如找99,已知在第4层

那么从1开始,找右子树的第4层最小值(从右孩子还是一直往左走2层)80,99>80 ...

谢谢 像您说的找99在level4
我为什么从1开始直接走右边去8了呢?
为什么不是1->3->7->47这样先找,发现47比99小,然后再去7的右子49继续比较大小呢?
回复

使用道具 举报

🔗
nico_sensei 2019-10-10 05:36:17 | 只看该作者
全局:
先找层L (0, 1, ...),然后得到该层的元素个数M = 2^L,然后二分N并查询检验。
找层O(log N),二分元素个数O(log M),查询O(log N),worst case O(log^2 N)。

评分

参与人数 1大米 +1 收起 理由
Vyronas + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
digdig 2019-10-10 05:40:04 | 只看该作者
全局:
Vyronas 发表于 2019-10-10 05:26
谢谢 像您说的找99在level4
我为什么从1开始直接走右边去8了呢?
为什么不是1->3->7->47这样先找,发现 ...

7的右子树还是比99小,这样就又要返回上层,就没法log n啦

从1去右边的8就是为了找到第4层的中点,联系一下二分查找来思考~

评分

参与人数 1大米 +1 收起 理由
Vyronas + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
Vyronas 发表于 2019/10/10 04:02:56
那如果找到了对应的层数,我如何才能获得这一层中的所有数呢?还应该是用bfs吧?那不就还得是O(n)嘛?
假如有序的话,不用知道这一层所有节点啊。假如你知道了是第10层,这一层一共有512个点,你就用二分,首先mid=256你就下到第10层从左到右数第256个点。然后看看是在左边还是右边,再继续二分找。  leetcode有一道题叫Count Complete Tree Nodes,solution里有一个类似的思路。
回复

使用道具 举报

🔗
 楼主| Vyronas 2019-10-10 05:57:22 | 只看该作者
全局:
digdig 发表于 2019-10-10 05:40
7的右子树还是比99小,这样就又要返回上层,就没法log n啦

从1去右边的8就是为了找到第4层的中点,联 ...

有点明白了 谢谢你!明天给你加米!
回复

使用道具 举报

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

本版积分规则

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