📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
楼主: batman4001
跳转到指定楼层
上一主题 下一主题
收起左侧

9月24日Google NYC Onsite 新鲜面经

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

使用道具 举报

🔗
bobzhang2004 2016-1-27 11:54:08 | 只看该作者
全局:
楼主 " BFS遍历,存每个substree到list里,然后用双重循坏找" 的意思就是先把每个Node都加入list?如果这样的话,dfs的任何一种遍历都可以放进所有的node啊,时间复杂度是O(n^3)?
回复

使用道具 举报

🔗
bobzhang2004 2016-1-27 12:09:22 | 只看该作者
全局:
duplicate substree,不知道有没有更好的方法
  1. public class DuplicateSubtree {

  2.         static class Node {
  3.                 Node left, right;
  4.                 int val;

  5.                 public Node(int val) {
  6.                         this.val = val;
  7.                 }
  8.         }

  9.         public List<Node> getDuplicateSubtree(Node root) {
  10.                 List<Node> res = new ArrayList<Node>();
  11.                 if (root == null) {
  12.                         return res;
  13.                 }
  14.                 List<Node> nodes = new ArrayList<Node>();
  15.                 addNodes(root, nodes);
  16.                 HashSet<Node> set = new HashSet<Node>();
  17.                 for (int i = 0; i < nodes.size() - 1; i++) {
  18.                         for (int j = i + 1; j < nodes.size(); j++) {
  19.                                 if (set.contains(nodes.get(i))) {
  20.                                         break;
  21.                                 }
  22.                                 if (isSameTree(nodes.get(i), nodes.get(j))) {
  23.                                         if (!set.contains(nodes.get(i))
  24.                                                         && !set.contains(nodes.get(j))) {
  25.                                                 res.add(nodes.get(i));
  26.                                         }
  27.                                         set.add(nodes.get(i));
  28.                                         set.add(nodes.get(j));
  29.                                 }
  30.                         }
  31.                 }

  32.                 return res;
  33.         }

  34.         private boolean isSameTree(Node node1, Node node2) {
  35.                 if (node1 == null && node2 == null) {
  36.                         return true;
  37.                 }
  38.                 if (node1 == null || node2 == null) {
  39.                         return false;
  40.                 }
  41.                 if (node1.val != node2.val) {
  42.                         return false;
  43.                 }

  44.                 return isSameTree(node1.left, node2.left)
  45.                                 && isSameTree(node1.right, node2.right);
  46.         }

  47.         private void addNodes(Node root, List<Node> nodes) {
  48.                 if (root == null) {
  49.                         return;
  50.                 }
  51.                 nodes.add(root);
  52.                 addNodes(root.left, nodes);
  53.                 addNodes(root.right, nodes);
  54.         }
  55.        
  56.         public static void main(String[] args) {
  57.                 Node root = new Node(1);
  58.                 root.left = new Node(2);
  59.                 root.right = new Node(3);
  60.                 root.left.left = new Node(4);
  61.                 root.right.left = new Node(2);
  62.                 root.right.right = new Node(4);
  63.                 root.right.left.left = new Node(4);
  64.                 DuplicateSubtree d = new DuplicateSubtree();
  65.                 List<Node> res = d.getDuplicateSubtree(root);
  66.                 for (Node node : res) {
  67.                         print(node);
  68.                         System.out.println();
  69.                 }
  70.         }

  71.         private static void print(Node node) {
  72.                 if (node == null) {
  73.                         return;
  74.                 }
  75.                 System.out.print(node.val + " ");
  76.                 print(node.left);
  77.                 print(node.right);
  78.         }
  79. }
复制代码
回复

使用道具 举报

🔗
bobzhang2004 2016-3-31 03:20:46 | 只看该作者
全局:
写了下第一题,
  1. public class FibonacciNumberII {

  2.        
  3.         // can larger than Integer.MAX_VALUE;
  4.         public static void main(String[] args) {
  5.                 List<List<Integer>> res = getFibonacciNumberPair(100);
  6.                 for (List<Integer> list : res) {
  7.                         System.out.println(list.get(0) + " " + list.get(1));
  8.                 }
  9.                 System.out.println(res.size() + " * ");
  10.         }
  11.        
  12.         public static List<List<Integer>> getFibonacciNumberPair(int n) {
  13.                 List<List<Integer>> res = new ArrayList<List<Integer>>();
  14.                 HashSet<String> set = new HashSet<String>();
  15.                 long[] arr = new long[n];
  16.                 arr[0] = 0;
  17.                 arr[1] = 1;
  18.                 for (int i = 2; i < n; i++) {
  19.                         arr[i] = arr[i - 1] + arr[i - 2];
  20.                 }
  21.                 for (int i = 0; i < n - 1; i++) {
  22.                         List<Integer> list = new ArrayList<Integer>();
  23.                         list.add((int)(arr[i] % 10));
  24.                         list.add((int)(arr[i + 1] % 10));
  25.                         String key = list.get(0) + "#" + list.get(1);
  26.                         if (set.contains(key)) {
  27.                                 return res;
  28.                         } else {
  29.                                 set.add(key);
  30.                         }
  31.                         res.add(list);
  32.                 }
  33.                
  34.                 return res;
  35.         }
  36. }
复制代码
回复

使用道具 举报

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

本版积分规则

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