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

FB 电话面经

🔗
 楼主| aprilcooper 2020-5-7 00:01:43 | 只看该作者
全局:
tm1234 发表于 2020-5-5 23:34
请问lz第一题先reverse在print面试官说这样做可以吗?

可以 zszszszs

评分

参与人数 2大米 +3 收起 理由
tm1234 + 1 赞一个
zkfairytale + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
 楼主| aprilcooper 2020-5-7 00:03:26 | 只看该作者
全局:
rsm 发表于 2020-5-5 20:19
没明白。
请问如何对presum array进行binary search得到range值的上下边界?这个上下边界应该是在所有元 ...

不好意思说掉了,需要一个inorder array 和presum array。inorder array 搜index,presum直接擦sum

评分

参与人数 3大米 +4 收起 理由
rsm + 1 很有用的信息!
jimg + 1 欢迎来一亩三分地论坛!
zkfairytale + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
徐小桃 2020-5-7 12:33:43 | 只看该作者
全局:
aprilcooper 发表于 2020-5-7 00:01
请注意看,是达到log(n)

算presum 不要O(n)?
回复

使用道具 举报

全局:
aprilcooper 发表于 2020/05/07 00:03:26
不好意思说掉了,需要一个inorder array 和presum array。inorder array 搜index...
这个树是BST吗?如果不是,那得先sorted 吧,才能用二分查找?
回复

使用道具 举报

🔗
 楼主| aprilcooper 2020-5-8 13:14:40 | 只看该作者
全局:

preprocess 一次就行了,rangesum作为API反复调用logn

评分

参与人数 1大米 +2 收起 理由
zkfairytale + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
徐小桃 2020-5-8 14:09:35 | 只看该作者
全局:
aprilcooper 发表于 2020-5-8 13:14
preprocess 一次就行了,rangesum作为API反复调用logn

哦哦是这个意思
回复

使用道具 举报

全局:
aprilcooper 发表于 2020/05/06 05:43:22
我觉得linkedlist那题要做到O(1) space O(n) time 还挺难的了啊。
range sum 那题...
O(1) space 就是不能Recursion了呗
回复

使用道具 举报

全局:
aprilcooper 发表于 2020/05/06 05:43:22
我觉得linkedlist那题要做到O(1) space O(n) time 还挺难的了啊。
range sum 那题...
Preprocessing 不算复杂度是吗
回复

使用道具 举报

全局:
楼主,请问 presum 是个数组吧 ?  怎么知道数组的长度?  因为开辟数组和binary search的时候都得知道这个长度是多少? 面试官有说吗?
回复

使用道具 举报

🔗
chiproeng 2020-5-13 13:13:48 | 只看该作者
全局:
**PreProcessing**
PreProcess: Run time O(n) Space: O(n)
Find Range Sum Multiple Time: Run Time :O(logN)
```
class Solution {
    int sum = 0;
    List<Integer> prefixSum = new ArrayList<>();
    List<Integer> list = new ArrayList<>();
    public int rangeSumBST(TreeNode root, int L, int R) {
        inOrder(root, L, R);
        int left = findIndex(L);
        int right = findIndex(R);
        int lowerBound = left == 0 ? 0 :prefixSum.get(left-1);
        return prefixSum.get(right) - lowerBound;
    }
   
    int findIndex(int L){
        int left = 0;
        int right = list.size();
        while(left<right){
            int mid = left + (right - left) /2 ;
            if(list.get(mid) == L) return mid;
            else if(list.get(mid)<L) left = mid +1;
            else right = mid;
        }
        return 0;
    }
    void inOrder(TreeNode root, int L, int R){
        if(root == null) return;
        
        inOrder(root.left, L, R);
        
        sum+=root.val;
        prefixSum.add(sum);
        list.add(root.val);
        
        inOrder(root.right, L, R);
    }
}
```
回复

使用道具 举报

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

本版积分规则

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