12
返回列表 发新帖
楼主: greatpat
跳转到指定楼层
上一主题 下一主题
收起左侧

FB Phone Screen 9/1

🔗
goha111 2017-9-7 11:39:03 | 只看该作者
全局:
vbnmmnbv 发表于 2017-9-6 23:34
直接traverse bst, 然后binary search另一个node不就可以节省空间了吗

那样时间是n/2*logn 也就是nlogn 不是n
回复

使用道具 举报

🔗
saveria 2017-9-7 12:37:22 | 只看该作者
全局:
楼主behavior问了什么呀?
回复

使用道具 举报

🔗
 楼主| greatpat 2017-9-7 13:57:46 | 只看该作者
全局:
Phone interview 没问bq
回复

使用道具 举报

🔗
mitchellhe 2017-9-21 11:40:00 | 只看该作者
全局:
楼主被要求写优化后的代码了吗,还是就说说思路就可以?
回复

使用道具 举报

全局:
从大到小的iterator怎么实现啊?也是用stack么?没思路啊。。。
回复

使用道具 举报

🔗
leonardcohen 2017-10-2 18:20:52 | 只看该作者
全局:
here is the code for two Iterator, Time O(n), Space O(h) as next() need stack:
  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. *     int val;
  5. *     TreeNode left;
  6. *     TreeNode right;
  7. *     TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11.     public boolean findTarget(TreeNode root, int k) {
  12.         // Time O(n), Space O(h)
  13.         if (root == null)
  14.             return false;
  15.         
  16.         LeftIterator leftIterator = new LeftIterator(root);
  17.         RightIterator rightIterator = new RightIterator(root);
  18.         int left = leftIterator.next();
  19.         int right = rightIterator.next();
  20.         
  21.         while (left < right) {
  22.             int twoSum = left + right;
  23.             if (twoSum == k) {
  24.                 return true;
  25.             }
  26.             if (twoSum < k && leftIterator.hasNext()) {
  27.                 left = leftIterator.next();
  28.             } else if (twoSum < k && !leftIterator.hasNext()) {
  29.                 break;
  30.             }
  31.             if (twoSum > k && rightIterator.hasNext()) {
  32.                 right = rightIterator.next();
  33.             } else if (twoSum > k && rightIterator.hasNext()) {
  34.                 break;
  35.             }
  36.         }
  37.         return false;
  38.     }
  39.         
  40.     class LeftIterator {
  41.         Stack<TreeNode> stack;

  42.         LeftIterator(TreeNode root) {
  43.                 stack = new Stack<TreeNode>();
  44.                 while (root != null) {
  45.                         stack.push(root);
  46.                         root = root.left;
  47.                 }
  48.         }

  49.         boolean hasNext() {
  50.                 return !stack.isEmpty();
  51.         }

  52.         int next() {
  53.                 TreeNode node = stack.pop();
  54.                 int result = node.val;
  55.                 if (node.right != null) {
  56.                         node = node.right;
  57.                         while (node != null) {
  58.                                 stack.push(node);
  59.                                 node = node.left;
  60.                         }
  61.                 }
  62.                 return result;
  63.         }   
  64.     }
  65.    
  66.     class RightIterator {
  67.         Stack<TreeNode> stack;

  68.         public RightIterator(TreeNode root) {
  69.                 stack = new Stack<TreeNode>();
  70.                 while (root != null) {
  71.                         stack.push(root);
  72.                         root = root.right;
  73.                 }
  74.         }

  75.         public boolean hasNext() {
  76.                 return !stack.isEmpty();
  77.         }

  78.         public int next() {
  79.                 TreeNode node = stack.pop();
  80.                 int result = node.val;
  81.                 if (node.left != null) {
  82.                         node = node.left;
  83.                         while (node != null) {
  84.                                 stack.push(node);
  85.                                 node = node.right;
  86.                         }
  87.                 }
  88.                 return result;
  89.         }      
  90. }
  91.    
  92.     }
复制代码

补充内容 (2017-10-2 18:21):
reference: https://www.programcreek.com/201 ... tree-iterator-java/
回复

使用道具 举报

🔗
leonardcohen 2017-10-2 18:22:22 | 只看该作者
全局:
jiahuanghuijun 发表于 2017-10-2 16:34
从大到小的iterator怎么实现啊?也是用stack么?没思路啊。。。

I pasted code for you.
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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