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

Facebook onsite

全局:

2013(10-12月) 码农类General 硕士 全职@meta - 内推 - Onsite  | | Fail |

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

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

x
四轮技术面试,每轮四十五分钟。每一轮先聊简历十到十五分钟,接下来做题,最后留下五分钟问问题。
1st: Given a m * n grid and the coordination of left bottom cell is
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
ven value

3rd: Leecode minimum window

4th: Check if a tree is BST


评分

参与人数 4大米 +121 收起 理由
小白too + 10 感谢分享!
北美农民 + 105
west0428 + 3 感谢分享!
Arthur2012 + 3 感谢分享!

查看全部评分


上一篇:Amazon OA面经
下一篇:有人有EMC在线笔试的经验吗?
推荐
dtcxzch 2014-12-5 16:09:40 | 只看该作者
全局:
jg7933 发表于 2014-11-18 19:58
quick select的java 代码哪里找的到例子吗?感觉自己写不出来。。。

刚才写的
public int quickSelect(int[] a, int start, int end, int k) throws Exception {
                if (end - start + 1 < k)
                        throw new IllegalArgumentException();
                int pivot = a[start];
                int p1 = start + 1;
                int p2 = end;
                while (true) {
                        while (p1 <= end && a[p1] <= pivot)
                                ++p1;
                        while (p2 >= start && a[p2] > pivot)
                                --p2;
                        if (p1 > p2)
                                break;
                        swap(a, p1, p2);
                        ++p1; --p2;
                }
                swap(a, start, p2);
                if (p1 - start == k)
                        return pivot;
                if (p1 - start < k)
                        return quickSelect(a, p1, end, k - (p1 - start));
                return quickSelect(a, start, p2, k);
        }
回复

使用道具 举报

推荐
richardzrc 2015-1-5 17:30:50 | 只看该作者
全局:
不对 上面这个算法是O(n+klogn)的,空间O(n), 其实如果 不需要返回k个数的顺序的话,其实只要直接On的quickselect就可以了,之前以为只能用来找第k个数,其实找到的同时也做了partition,前k小的都在左边了,后面的都在右边了,因此和quickselect是一样的,时间复杂度O(n),空间是O(n),开一个新的数组表示差值执行quickselect,还有一个递归栈,最坏O(n), 时间不差于之前那个算法,甚至可能更好。

int Partition_InOrder(vector<pair<int, int>> &a, int low, int high)
{//inorder
    int i=low, j=high;
    pair<int,int> pivot=a[low];
    while(i<j)
    {
        while(i<j && a[j].first >= pivot.first) j--;
        while(i<j && a[i].first <= pivot.first) i++;
        if(i<j) swap(a[i], a[j]);
    }
    swap(a[i], a[low]);
    return i;
}

int QuickSelect(vector<pair<int, int> >& a, int low, int high, int k)//select kth smallest, or inorder kth ele
{// 1<=k<=high-low+1, low<=high
    if(low>high) return -1;
    int mid=Partition_InOrder(a, low, high);
    int prelen=mid-low+1;
    if(prelen==k) return a[mid].first;
    else if(prelen > k)
        return QuickSelect(a, low, mid-1, k);
    else
        return QuickSelect(a, mid+1, high, k-prelen);
}

vector<int> FindKClosest_QuickSelect(vector<int>& a, int k, int x)
{
    int n=a.size();
    if(k==n) return a;
    vector<pair<int, int>> v;
    for(int i=0;i<n;i++) v.push_back({abs(a[i]-x), i});
    QuickSelect(v, 0, n-1, k+1);
    vector<int> ans;
    for(int i=0;i<k;i++)
        ans.push_back(a[v[i].second]);
    //vector<int> ans(a.begin(), a.begin()+k-1);
    return ans;
}
回复

使用道具 举报

推荐
richardzrc 2015-1-5 15:24:00 | 只看该作者
全局:
第二题代码,请大神们指教

struct Node
{
    int val;
    int index;
    Node(int val_, int index_):val(val_), index(index_)
    {
    }
    bool operator<(const Node& n1) const
    {
        return val>n1.val;
    }
};
vector<int> FindKClosest(vector<int> a, int k, int x)//, 0<=k<=a.size()
{
    //for(auto &i: a) i=abs(i-x);
    vector<Node> v;
    for(int i=0;i<a.size();i++)
    {
        Node n({abs(a[i]-x), i});
        v.push_back(n);
    }
    priority_queue<Node> pq(v.begin(), v.end());
    //for(auto i: v) pq.push(i);
    vector<int> ans;
    //cout<<k<<endl;
    for(int i=0;i<k;i++)
    {
        ans.push_back(a[pq.top().index]);
        pq.pop();
    }
    return ans;
}
回复

使用道具 举报

🔗
Arthur2012 2014-10-31 03:43:07 | 只看该作者
全局:
lz你好,我想印证下我对第二题的理解,是求在一个array里面第k个最接近given value 的数对吗?
解法因为和求第k大的数一样,维护一个大小为k 的heap,对吗?
谢谢啦!
回复

使用道具 举报

🔗
yzl232 2014-10-31 03:43:53 | 只看该作者
本楼:
全局:
都不难啊。。
回复

使用道具 举报

🔗
 楼主| ccgogo123 2014-10-31 03:55:52 | 只看该作者
全局:
不是第k个,是前k个。的确用heap。
回复

使用道具 举报

🔗
22691482 2014-10-31 04:07:33 | 只看该作者
全局:
这个题貌似都比较简单啊。。。
回复

使用道具 举报

🔗
王可雪 2014-10-31 04:26:45 | 只看该作者
全局:
array.map(abs(self - given number))
Then use min heap
回复

使用道具 举报

🔗
nostal 2014-10-31 04:46:30 | 只看该作者
全局:
看起来并不难,好好准备应该可以crack
回复

使用道具 举报

🔗
小白too 2014-10-31 05:02:46 | 只看该作者
全局:
22691482 发表于 2014-10-31 04:07
这个题貌似都比较简单啊。。。

第一题是dp么。。

补充内容 (2014-10-31 05:19):
好吧,我想多了。。bfs就行
回复

使用道具 举报

🔗
ohmystill 2014-10-31 05:06:52 | 只看该作者
全局:
貌似 都很简单
回复

使用道具 举报

🔗
psyclaudeZ 2014-10-31 06:36:06 | 只看该作者
全局:
第二题如果不需要结果有序的话堆都用不着……直接上selection algorihtm, 选出跟target差绝对值第k大元素,然后返回A[0]到A[k - 1]就好了……O(n)时间,O(1)额外空间……

回复

使用道具 举报

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

本版积分规则

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