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

FB跪经,疑似新题,我是没见过

全局:

2016(10-12月) 码农类General 硕士 全职@meta - 内推 - 技术电面 在线笔试  | | Fail | 应届毕业生

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

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

x
中国人面的,打了个招呼就开始做题,一共四十五分钟

就一道题:
remove as many edges as possible from a tree and the result trees all have even number of nodes

         o
  /    |   |   \
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
/div>
第一次记录所有以当前node为根的subtree的node总数
第二次就可以用这些数据切割树了

当时脑子糊住没想到

评分

参与人数 1大米 +3 收起 理由
dobbin + 3 感谢分享!

查看全部评分


上一篇:IBM Entry Level Front-End Developer OA
下一篇:前几天的bloomberg
推荐
rinto 2016-10-18 09:12:05 | 只看该作者
全局:
修改了一下,可以跑楼主给的例子了。


  1. public class TreeNode{
  2.     int val;
  3.     List<TreeNode> subtree;
  4.     public TreeNode(int val){
  5.         this.val = val;
  6.         subtree = new ArrayList<>();
  7.     }

  8.     public void addChild(TreeNode child){
  9.         subtree.add(child);
  10.     }
  11. }

  12. public class BreakTree {

  13.     public List<TreeNode> breakTree(TreeNode root){
  14.         List<TreeNode> result = new ArrayList<>();
  15.         countAndBreak(result, root);
  16.         return result;
  17.     }

  18.     private int countAndBreak(List<TreeNode> result, TreeNode root){
  19.         if (root == null){
  20.             return 0;
  21.         }

  22.         int count = 1;
  23.         Iterator<TreeNode> iter = root.subtree.iterator();
  24.         while (iter.hasNext()){
  25.             int childCount = countAndBreak(result, iter.next());
  26.             if (childCount == 0){
  27.                 iter.remove();
  28.             } else{
  29.                 count += childCount;
  30.             }
  31.         }

  32.         if (count % 2 == 0){
  33.             result.add(root);
  34.             return 0;
  35.         } else{
  36.             return count;
  37.         }
  38.     }


  39.     public static void main(String[] args){
  40.         TreeNode root = new TreeNode(0);

  41.         TreeNode firstChild = new TreeNode(1);
  42.         firstChild.addChild(new TreeNode(2));
  43.         root.addChild(firstChild);

  44.         root.addChild(new TreeNode(3));
  45.         root.addChild(new TreeNode(4));
  46.         root.addChild(new TreeNode(5));

  47.         BreakTree soln = new BreakTree();
  48.         List<TreeNode> result = soln.breakTree(root);
  49.         System.out.println(result.size());
  50.     }
  51. }
复制代码
回复

使用道具 举报

推荐
iPhD 2016-10-18 06:24:33 | 只看该作者
全局:
jialiu54321 发表于 2016-10-18 06:23
一个空白的编辑器,所有都要自己写,包括TreeNode,test case等等

楼主运气真好差。。。这国人大哥坑爹呀。。。
回复

使用道具 举报

推荐
iPhD 2016-10-18 06:21:08 | 只看该作者
全局:
楼主运气好差。。摸摸。。。

这题的输入类型是什么?多叉树node吗?
回复

使用道具 举报

🔗
 楼主| jialiu54321 2016-10-18 06:23:28 | 只看该作者
全局:
iPhD 发表于 2016-10-18 06:21
楼主运气好差。。摸摸。。。

这题的输入类型是什么?多叉树node吗?

一个空白的编辑器,所有都要自己写,包括TreeNode,test case等等
回复

使用道具 举报

🔗
yingy4 2016-10-18 06:44:23 | 只看该作者
全局:
这貌似是hackerrank的原题,https://www.hackerrank.com/challenges/even-tree
回复

使用道具 举报

🔗
yuanxiehuang 2016-10-18 07:13:28 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
rinto 2016-10-18 08:41:00 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
iPhD 2016-10-18 08:53:42 | 只看该作者
全局:
rinto 发表于 2016-10-18 08:41
确实没见过这种题,很tricky啊,开始还以为要先把树转化成图来做,仔细看了一下输出要求仍然是树,估计面试 ...
  1. public class EvenTree {

  2.     private Set<Integer>[] adj;
  3.     private boolean[] visited;
  4.     private int E;
  5.     private int V;
  6.     private int count;
  7.     private List<Integer> nodes;

  8.     public EvenTree(int E, int V) {
  9.         adj = new (HashSet<Integer>) Object[V];
  10.         visited = new boolean[V];
  11.         this.E = E;
  12.         this.V = V;
  13.         count = 0;
  14.         nodes = new ArrayList<Integer>();      
  15.     }

  16.     public int dfs(int node) {
  17.         visit[node] = true;
  18.         int children = 0;

  19.         for (Integer v : adj[node]) {
  20.             if (!visit[v]) {
  21.                 int num = dfs(v);
  22.                 if (num % 2 == 0) {
  23.                     count++;
  24.                 } else {
  25.                     children += num;
  26.                 }
  27.             }
  28.         }

  29.         if (children % 2 == 1) {
  30.             nodes.add(node);
  31.         }
  32.         
  33.         return children + 1;
  34.     }

  35.     public static void main(String[] args) {
  36.         EvenTree et = new EvenTree(E, V);
  37.         for (int i = 0; i < E; i++) {
  38.             et.adj[v1].add(v2);
  39.             et.adj[v2].add(v1);
  40.         }

  41.         et.dfs(0);
  42.     }

  43. }
复制代码
回复

使用道具 举报

🔗
yhatl 2016-10-18 09:26:32 | 只看该作者
全局:
遍历一遍 只要children有even个 就cut加入forest
回复

使用道具 举报

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

本版积分规则

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