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

骨骼电面1题

全局:
既然只有一条path,就是说没有环,那我感觉可以理解成一个k叉树.
回复

使用道具 举报

🔗
 楼主| jtzgz 2020-6-14 04:54:18 | 只看该作者
全局:
amgfan 发表于 2020-6-13 16:24
你这不是 greedy 吧 ...

面试官,自己说greedy。我做的,是吧,所有的点亮的可能都算一遍。找到最小值。
回复

使用道具 举报

🔗
 楼主| jtzgz 2020-6-14 04:54:36 | 只看该作者
全局:
beef1218 发表于 2020-6-14 04:44
既然只有一条path,就是说没有环,那我感觉可以理解成一个k叉树.

谢谢。对。欢迎给个code 解法。学习下。
回复

使用道具 举报

🔗
vinf 2020-6-15 10:51:29 | 只看该作者
全局:
jtzgz 发表于 2020-6-14 04:54
谢谢。对。欢迎给个code 解法。学习下。

https://paste.ubuntu.com/p/k2488KfHrh/  这是 dp 的解法。
回复

使用道具 举报

🔗
fangdanzai 2020-6-15 17:04:35 | 只看该作者
全局:
每次找到出度最多的房间 选择点亮后 已经被点亮的点要从图中删除 继续选择出度最多的房间 直到点被删完
回复

使用道具 举报

🔗
EmanekaT 2020-6-16 15:45:51 | 只看该作者
全局:
难道不是House Robber III换个壳吗?任意两node之间只有一条path。
回复

使用道具 举报

🔗
 楼主| jtzgz 2020-6-17 13:01:52 | 只看该作者
全局:
EmanekaT 发表于 2020-6-16 15:45
难道不是House Robber III换个壳吗?任意两node之间只有一条path。

那个是求max money,这个是min的node。
回复

使用道具 举报

🔗
 楼主| jtzgz 2020-6-18 03:21:27 | 只看该作者
全局:
fangdanzai 发表于 2020-6-15 17:04
每次找到出度最多的房间 选择点亮后 已经被点亮的点要从图中删除 继续选择出度最多的房间 直到点被删完

我也是如此做的。后来发现不对。面试官说不对。
回复

使用道具 举报

🔗
ninjax 2020-7-20 04:58:34 | 只看该作者
全局:
按照K tree做的,不知道对不对。 狗的连电面都这么难!@!

  1. def minLights(edges):
  2.     # exactly one path betteween any two rooms (means no cycle, one graph)
  3.     neighbors = defaultdict(list)
  4.     for i, j in edges:
  5.         neighbors[i].append(j)
  6.         neighbors[j].append(i)

  7.     root = None
  8.     for i, v in neighbors.items():
  9.         if len(v) == 1:
  10.             root = i
  11.             break
  12.     print(root, neighbors)
  13.     def dfs(cur, last):
  14.         # [State 0] Strict subtree: All the nodes below this node are covered, but not this node.
  15.         # [State 1] Normal subtree: All the nodes below and including this node are covered, but there is no camera here.
  16.         # [State 2] Placed camera: All the nodes below and including this node are covered, and there is a camera here (which may cover nodes above this node).
  17.         
  18.         dp_next = []
  19.         for n in neighbors[cur]:
  20.             if n == last:
  21.                 continue
  22.             dp_next.append(dfs(n, cur))

  23.         # leaf node
  24.         if not dp_next:
  25.             print(cur)
  26.             return [0, float('inf'), 1]

  27.         dp0 = sum(dp_next[i][1] for i in range(len(dp_next)))

  28.         dp1 = float('inf')
  29.         if len(dp_next) == 1:
  30.             dp1 = dp_next[0][2]
  31.         else:
  32.             total = 0
  33.             for i in range(len(dp_next)):
  34.                 total += min(dp_next[i][1:])
  35.             for i in range(len(dp_next)):
  36.                 dp1 = min(dp1, dp_next[i][2] + total - min(dp_next[i][1:]))

  37.         dp2 = 1 + sum(min(dp_next[i]) for i in range(len(dp_next)))
  38.         print(cur, dp0, dp1, dp2)
  39.         return dp0, dp1, dp2

  40.     return min(dfs(root, None)[1:])
复制代码

评分

参与人数 1大米 +2 收起 理由
alpaca1234 + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
 楼主| jtzgz 2020-7-20 15:41:20 | 只看该作者
全局:
ninjax 发表于 2020-7-20 04:58
按照K tree做的,不知道对不对。 狗的连电面都这么难!@!
[mw_shl_code=python,true]
def minLights(edg ...

也没有。我backtracking 做出来了,也让过了呢。
回复

使用道具 举报

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

本版积分规则

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