📣 独立日限时特惠: VIP通行证立减$68
回复: 11
跳转到指定楼层
上一主题 下一主题
收起左侧

全新谷歌full time电面

全局:

2015(10-12月) 码农类General 本科 全职@google - 内推 - 技术电面  | | Other | 应届毕业生

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

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

x
给一堆(int, int)的input表示一个tree(不一定binary),前一个int表示parent,后一个表示child,对所有
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
ld
     output:
10 10
15 15

评分

参与人数 2大米 +18 收起 理由
pengzewen37 + 15 感谢分享!
Mr.Sagemaker + 3 感谢分享!

查看全部评分


上一篇:Uber填了表以后一般多久安排interview
下一篇:MS新鲜onsite

本帖被以下淘专辑推荐:

全局:
我的想法是先遍历一遍这一对(parent,child)对,然后用一个set放leaf,一个map放(child,parent)对,然后set里面的leaf用dfs向上找
parent,找最大的ancestor的值,这过程中可以用一个hashmap记录每个node的最大的ancestor,来避免重复寻找
回复

使用道具 举报

全局:
不建树:
  1. class SolutionWithoutTreeConstruction:
  2.     def getLeafMax(self, edges):
  3.         if not edges: return
  4.         leaves = set()
  5.         allNodes = set()
  6.         parentMap = {}

  7.         # construct parentMap and leaf set
  8.         # {10: 5, 15: 5, 5: 8, 6: 8, 7: 6}, set([10, 15, 7])
  9.         for parent, child in edges:
  10.             parentMap[child] = parent
  11.             if parent in leaves:
  12.                 leaves.remove(parent)
  13.             if child not in allNodes:
  14.                 leaves.add(child)
  15.             allNodes.add(parent)
  16.             allNodes.add(child)

  17.         # Search for each leaf in the leaf set
  18.         for leaf in leaves:
  19.             curMax = leaf
  20.             node = leaf
  21.             while node in parentMap:
  22.                 node = parentMap[node]
  23.                 curMax = max(node, curMax)
  24.             curMax = max(node, curMax)
  25.             print leaf, curMax
复制代码
建树,然后DFS:
  1. class TreeNode:
  2.     def __init__(self, x):
  3.         self.val = x
  4.         self.children = []

  5. class Tree:
  6.     def __init__(self):
  7.         self.root = None
  8.         self.possibleRoots = set()
  9.         self.nodes = {}

  10.     def insertEdge(self, parent, child):
  11.         if not self.root:
  12.             parentNode = TreeNode(parent)
  13.             childNode = TreeNode(child)
  14.             self.possibleRoots.add(parentNode)
  15.             parentNode.children.append(childNode)
  16.             self.nodes[parent] = parentNode
  17.             self.nodes[child] = childNode
  18.         else:
  19.             if parent in self.nodes and child in self.nodes:
  20.                 self.nodes[parent].children.append(self.nodes[child])
  21.                 if self.nodes[child] in self.possibleRoots:
  22.                     self.possibleRoots.remove(self.nodes[child])
  23.             elif parent in self.nodes and child not in self.nodes:
  24.                 childNode = TreeNode(child)
  25.                 self.nodes[child] = childNode
  26.                 self.nodes[parent].children.append(childNode)
  27.             elif parent not in self.nodes and child in self.nodes:
  28.                 parentNode = TreeNode(parent)
  29.                 self.nodes[parent] = parentNode
  30.                 self.nodes[parent].children.apped(self.nodes[child])
  31.                 if self.nodes[child] in self.possibleRoots:
  32.                     self.possibleRoots.remove(self.nodes[child])
  33.                 self.possibleRoots.add(self.nodes[parent])
  34.             else:
  35.                 parentNode = TreeNode(parent)
  36.                 childNode = TreeNode(child)
  37.                 self.possibleRoots.add(parentNode)
  38.                 parentNode.children.append(childNode)
  39.                 self.nodes[parent] = parentNode
  40.                 self.nodes[child] = childNode
  41.         if len(self.possibleRoots) == 1:
  42.             self.root = list(self.possibleRoots)[0]

  43.     def getLeafMax(self):
  44.         node = self.root
  45.         self.dfs(node, node.val)

  46.     def dfs(self, node, curMax):
  47.         if not node.children:
  48.             print node.val, curMax
  49.             return

  50.         for child in node.children:
  51.             self.dfs(child, max(curMax, child.val))
复制代码
回复

使用道具 举报

推荐
dong882205 2015-11-1 23:53:17 | 只看该作者
全局:
额还没怎么刷LC,大神莫喷,但貌似不是Topological Sort,像是DP
我们给每个节点多包一层,储存: 自己的val, 目前为止从root到自己路径上最大的maxval, bool leaf 自己是否是叶子节点
然后,每一个新加的节点(parent, child),做这些: parent.leaf = false, child.maxval = max(parent.maxval, child.val),child.leaf = true
最后只要遍历leaf=true的即可
但我不知道这代码怎么写。。。。

补充内容 (2015-11-1 23:58):
噢存储的时候,不需要存父-子pair,用一个unordered_map<Node>存所有点即可,每次输入更新parent点和child点
回复

使用道具 举报

🔗
AndrewFish 2015-10-30 04:13:57 | 只看该作者
全局:
深度优先遍历的同时 maintain 路径上的最大节点应该可以解决吧?
回复

使用道具 举报

🔗
yanguango 2015-10-30 04:31:15 | 只看该作者
全局:
应该是首先建立二叉树,需要一个 HashMap 来记录 int -> node,然后 dfs
回复

使用道具 举报

🔗
 楼主| leoyue 2015-10-30 04:35:10 | 只看该作者
全局:
AndrewFish 发表于 2015-10-30 04:13
深度优先遍历的同时 maintain 路径上的最大节点应该可以解决吧?

啊我后来想得是直接用map<int, int>来存,child做key, parent做value,一个个往回search,然后用一个vector吧来记所有的leaf node,每插入一个node就看有没有leaf node变成了非leaf。
回复

使用道具 举报

🔗
 楼主| leoyue 2015-10-30 04:40:14 | 只看该作者
全局:
另:如果可能的话求其它公司内推。。
回复

使用道具 举报

🔗
muancy 2015-11-1 10:00:16 | 只看该作者
全局:
LeetCode course schedule 的变种吧?
回复

使用道具 举报

🔗
maomaoxiong 2015-11-2 02:01:36 | 只看该作者
全局:
这题应该正常方法解:就是建立一个树,然后DFS遍历。这题就是考你基本功。应该是warm up题。
其它方法复杂,要好好想想才行。而且复杂度一样。
你想复杂了。

补充内容 (2015-11-2 02:07):
比如:一个简单例子。1->2->3. 输入顺序是(2,3),(1,2)。
你要怎样建立这个child-》parent的tree?
回复

使用道具 举报

全局:
maomaoxiong 发表于 2015-11-2 02:01
这题应该正常方法解:就是建立一个树,然后DFS遍历。这题就是考你基本功。应该是warm up题。
其它方法复杂 ...

这种建树只是warm up么。。我觉得要处理顺序关系就好复杂,不是几行就能解决的呀。。
回复

使用道具 举报

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

本版积分规则

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