由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问三道题
相关主题
贡献1个A家3面的面经,被老印坑了4sum的那道题
这题怎么做?请教leetcode的gray code
updae: 明天GOOG电面, 求祝福 interview 问题Leetcode一题(非OJ)
问一个题目[面试题求教]remove common phrases from each sentence
Facebook interview 面经狗家面经
一个容易记忆的permutation算法面试题讨论
请教amazon面试题四个月骑驴找马终于结束,发面经回馈本版
G家店面这道Amazon面试题怎么做
相关话题的讨论汇总
话题: int话题: cur话题: find话题: long话题: node
进入JobHunting版参与讨论
1 (共1页)
r*******g
发帖数: 1335
1
1,Given a n-ary tree. A random leaf node will be selected.Imagine that you
are now holding the tree with your hand from that node. All other nodes will
now fall under gravity. Write a function to perform this transformation.
n-ary tree又不是bst,这题什么意思,怎么也无法想象把一个节点提起来是什么感觉
2,Given two lists, each containing numbers, how would you find the
intersection of these two lists? What if these two lists are read from a
huge file that cannot fit in memory?
如果文件很大该怎么办,我能想到的是尝试一个number对应一位,但是如果memory实在
有限,number的range很大,那也没有办法。
3,Given 3 prime numbers and an integer k, find the kth number if all the
nos which are having these 3 prime numbers as their factors are arranged in
increasing order.
Eg. prime numbers - 2,3,5
The increasing sequence will be 2,3,4,5,6,8,9...
这个题我在careerup上看到两次了,都没看到好的解法,我能想到的是,当你走到2^l*
3^m*5^n时,下一个数一定是通过2^l*3^m*5^(n-1)之后的数变化得到,这样就抛弃了很
多数,假设紧接2^l*3^m*5^(n-1)的数是M,那么下一个数就在2^l*3^m*5^n和M*5之间,
这个范围有可能很大,挨个做质因数分解似乎不大对。似乎这个题只能尽量使amotized
时间尽量小?any link on this?
谢了
c****p
发帖数: 6474
2
第1题
当选定某一个结点n后,
parent(n)和children(n)都成为n的子结点。
对应地,n->parent(n)->parent(parent(n))->...->root这一路径上所有的父子关系全
部逆转,
其他关系不变。

you
will

【在 r*******g 的大作中提到】
: 1,Given a n-ary tree. A random leaf node will be selected.Imagine that you
: are now holding the tree with your hand from that node. All other nodes will
: now fall under gravity. Write a function to perform this transformation.
: n-ary tree又不是bst,这题什么意思,怎么也无法想象把一个节点提起来是什么感觉
: 2,Given two lists, each containing numbers, how would you find the
: intersection of these two lists? What if these two lists are read from a
: huge file that cannot fit in memory?
: 如果文件很大该怎么办,我能想到的是尝试一个number对应一位,但是如果memory实在
: 有限,number的range很大,那也没有办法。
: 3,Given 3 prime numbers and an integer k, find the kth number if all the

r*******g
发帖数: 1335
3
那这个题就是考察不引用额外空间没有向上指针情况下如何颠倒一个linked list?

【在 c****p 的大作中提到】
: 第1题
: 当选定某一个结点n后,
: parent(n)和children(n)都成为n的子结点。
: 对应地,n->parent(n)->parent(parent(n))->...->root这一路径上所有的父子关系全
: 部逆转,
: 其他关系不变。
:
: you
: will

c****p
发帖数: 6474
4
reverse a single linked list

【在 r*******g 的大作中提到】
: 那这个题就是考察不引用额外空间没有向上指针情况下如何颠倒一个linked list?
g**********y
发帖数: 14569
5
2. 先merge sort file, 然后merge intersection.
3. 这是个Dijkstra算法的变形,从set = {2^0*3^0*5^0 = 1}出发,每次取最小的数,
然后把该数的2*a, 3*a, 5*a放进set里(需要一个visited[][][]来记录避免重复), 然
后再取最小的重复以上步骤,直到k步。

you
will

【在 r*******g 的大作中提到】
: 1,Given a n-ary tree. A random leaf node will be selected.Imagine that you
: are now holding the tree with your hand from that node. All other nodes will
: now fall under gravity. Write a function to perform this transformation.
: n-ary tree又不是bst,这题什么意思,怎么也无法想象把一个节点提起来是什么感觉
: 2,Given two lists, each containing numbers, how would you find the
: intersection of these two lists? What if these two lists are read from a
: huge file that cannot fit in memory?
: 如果文件很大该怎么办,我能想到的是尝试一个number对应一位,但是如果memory实在
: 有限,number的range很大,那也没有办法。
: 3,Given 3 prime numbers and an integer k, find the kth number if all the

r*******g
发帖数: 1335
6
第二题merge sort的话岂不是很耗费硬盘空间
第三题我很好奇的是如何每次取最小的数,你说的dijkstra不是最短路径算法么,貌似
你说的是一次explor很多数,然后选最小一个,这样平坦下来开销小?explor的数还可
以放到heap里面。

【在 g**********y 的大作中提到】
: 2. 先merge sort file, 然后merge intersection.
: 3. 这是个Dijkstra算法的变形,从set = {2^0*3^0*5^0 = 1}出发,每次取最小的数,
: 然后把该数的2*a, 3*a, 5*a放进set里(需要一个visited[][][]来记录避免重复), 然
: 后再取最小的重复以上步骤,直到k步。
:
: you
: will

S**I
发帖数: 15689
7
a brute force solution to the third problem:
1. Let n = 0, m = 1;
2. Find all permutations of i, j and k such that i+j+k = m. Compute product
of 2^i * 3^j * 5^k of each permutation, put all the products in a set S.
3. Suppose the number of permutations found in the previous step is p (it
can be shown that p = (m+1)*(m+2)/2); then m++, n += p.
4. If k > n, go back to step 2; otherwise, the kth number in set S is the
solution.

【在 r*******g 的大作中提到】
: 第二题merge sort的话岂不是很耗费硬盘空间
: 第三题我很好奇的是如何每次取最小的数,你说的dijkstra不是最短路径算法么,貌似
: 你说的是一次explor很多数,然后选最小一个,这样平坦下来开销小?explor的数还可
: 以放到heap里面。

g**********y
发帖数: 14569
8

这种题硬盘空间不用考虑。内存放不下,你还能怎么办?
那个set是min heap。如果还有不明白的,参考topcoder的tutorial:
http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=

【在 r*******g 的大作中提到】
: 第二题merge sort的话岂不是很耗费硬盘空间
: 第三题我很好奇的是如何每次取最小的数,你说的dijkstra不是最短路径算法么,貌似
: 你说的是一次explor很多数,然后选最小一个,这样平坦下来开销小?explor的数还可
: 以放到heap里面。

S**I
发帖数: 15689
9
In Dijkstra all the neighbors of a current node are known, but in this problem they are
unknown, so how do you find the smallest neighbor?

【在 g**********y 的大作中提到】
:
: 这种题硬盘空间不用考虑。内存放不下,你还能怎么办?
: 那个set是min heap。如果还有不明白的,参考topcoder的tutorial:
: http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=

d*******d
发帖数: 2050
10
这题比这个要麻烦得多了.
首先得把从root到这个node的path找出来.
然后reverse这个path.
这个过程,又和这个树的表示形式相关.
coding很麻烦的.
就算是个binary tree,半个小时内无错coding都很有难度.

【在 r*******g 的大作中提到】
: 那这个题就是考察不引用额外空间没有向上指针情况下如何颠倒一个linked list?
相关主题
一个容易记忆的permutation算法4sum的那道题
请教amazon面试题请教leetcode的gray code
G家店面Leetcode一题(非OJ)
进入JobHunting版参与讨论
r*******g
发帖数: 1335
11
这个题最难弄的地方是,从2^l*3^m*5^n到2^(l+1)*3^(m+1)*5^(n+1)之间有很多数,有
的数其指数可能不是在l和l+1之间。所以,即使把很多数放入heap,也需要考虑清楚到
底哪些放入heap。
我能想到的就是我第一个帖子说的,每次对前面一段数做变化,假设目前这段是从A到B
,对每个数乘以2或者3或者5,如果超过了B,就把变化后的数放进heap。注意这个A和B
是变化的,我在第一个帖子说了的。
这样做的话,一次会存入很多数进入heap,每次B向后一定一个数,A也向后移动。

problem they are

【在 S**I 的大作中提到】
: In Dijkstra all the neighbors of a current node are known, but in this problem they are
: unknown, so how do you find the smallest neighbor?

d*******d
发帖数: 2050
12
这题书上不是给了答案么?书上答案挺好的啊.那用得上dijkstra啊.

到B
和B

【在 r*******g 的大作中提到】
: 这个题最难弄的地方是,从2^l*3^m*5^n到2^(l+1)*3^(m+1)*5^(n+1)之间有很多数,有
: 的数其指数可能不是在l和l+1之间。所以,即使把很多数放入heap,也需要考虑清楚到
: 底哪些放入heap。
: 我能想到的就是我第一个帖子说的,每次对前面一段数做变化,假设目前这段是从A到B
: ,对每个数乘以2或者3或者5,如果超过了B,就把变化后的数放进heap。注意这个A和B
: 是变化的,我在第一个帖子说了的。
: 这样做的话,一次会存入很多数进入heap,每次B向后一定一个数,A也向后移动。
:
: problem they are

r*******g
发帖数: 1335
13
我们可以recursion,
Move(Node * currentnode, bool & path_contain_node, Node * & final_root){
如果下面传上来的path_contain_node是true,那就颠倒顺序,否则的话维持不变。
关键就是走到了新的root怎么办
}

【在 d*******d 的大作中提到】
: 这题比这个要麻烦得多了.
: 首先得把从root到这个node的path找出来.
: 然后reverse这个path.
: 这个过程,又和这个树的表示形式相关.
: coding很麻烦的.
: 就算是个binary tree,半个小时内无错coding都很有难度.

S**I
发帖数: 15689
14
I think this solution is no better than brute force. :) Brute force is not bad for this problem, it is approximately linear with k.

到B
和B

【在 r*******g 的大作中提到】
: 这个题最难弄的地方是,从2^l*3^m*5^n到2^(l+1)*3^(m+1)*5^(n+1)之间有很多数,有
: 的数其指数可能不是在l和l+1之间。所以,即使把很多数放入heap,也需要考虑清楚到
: 底哪些放入heap。
: 我能想到的就是我第一个帖子说的,每次对前面一段数做变化,假设目前这段是从A到B
: ,对每个数乘以2或者3或者5,如果超过了B,就把变化后的数放进heap。注意这个A和B
: 是变化的,我在第一个帖子说了的。
: 这样做的话,一次会存入很多数进入heap,每次B向后一定一个数,A也向后移动。
:
: problem they are

r*******g
发帖数: 1335
15
I got it from cracking code interview. It is already in book.....

bad for this problem, it is approximately linear with k.

【在 S**I 的大作中提到】
: I think this solution is no better than brute force. :) Brute force is not bad for this problem, it is approximately linear with k.
:
: 到B
: 和B

g**********y
发帖数: 14569
16
Find kth p,q,r's composition number (assume p public long find(int p, int q, int r, int k) {
PriorityQueue pq = new PriorityQueue();
long t = p;
pq.add(t);
for (int i=0; i t = pq.remove();
add(pq, p*t);
add(pq, q*t);
add(pq, r*t);
}
return t;
}

private void add(PriorityQueue pq, long n) {
if (!pq.contains(n)) pq.add(n);
}
g**********y
发帖数: 14569
17
哪本书上的答案?能贴一下吗?不需要经典Dijkstra的code, 几行就行,但是思路是一
样的,本质就是贪心。

【在 d*******d 的大作中提到】
: 这题书上不是给了答案么?书上答案挺好的啊.那用得上dijkstra啊.
:
: 到B
: 和B

d*******d
发帖数: 2050
18
好,写点code攒人品:
return 第k个.和原题要求稍微不一样一点.
int findkth(int p, int q, int r, int k){
queue q1, q2, q3;
q1.push(p);
q2.push(q);
q3.push(r);
int cur = p;
for(int i =1; i<=k; i++){
int h1 = q1.front();
int h2 = q2.front();
int h3 = q3.front();
int min = h1 < h2 ? h1 : h2;
min = min cur = min;
if( min == h1){
q1.pop();
q1.push(cur*p);
q2.push(cur*q);
q3.push(cur*r);
}else if( min == h2){
q2.pop();
q2.push(cur*q);
q2.push(cur*r);
}else{
q3.pop();
q3.push(cur*r);
}
}
return cur;
}

【在 g**********y 的大作中提到】
: 哪本书上的答案?能贴一下吗?不需要经典Dijkstra的code, 几行就行,但是思路是一
: 样的,本质就是贪心。

s******c
发帖数: 1920
19
第二题:
对list1生成一个摘要(比如一个hashtable或者一个bloom filter)
然后在enumerate list2中的每个元素, 检查其是否hit那个摘要, 并记录所有结果为
positive的元素,存入list2'
然后对于list2' 的元素再做一遍摘要来筛一遍list1 得到list1'
这时list1'和list2'的元素已经很相近了,再来分别sort一下,然后来找.
对于巨大的文件, 上述两个筛数的过程可以用mapreduce来完成.

you
will
in
l*
amotized

【在 r*******g 的大作中提到】
: 1,Given a n-ary tree. A random leaf node will be selected.Imagine that you
: are now holding the tree with your hand from that node. All other nodes will
: now fall under gravity. Write a function to perform this transformation.
: n-ary tree又不是bst,这题什么意思,怎么也无法想象把一个节点提起来是什么感觉
: 2,Given two lists, each containing numbers, how would you find the
: intersection of these two lists? What if these two lists are read from a
: huge file that cannot fit in memory?
: 如果文件很大该怎么办,我能想到的是尝试一个number对应一位,但是如果memory实在
: 有限,number的range很大,那也没有办法。
: 3,Given 3 prime numbers and an integer k, find the kth number if all the

g**********y
发帖数: 14569
20
谢谢,这个效率很好。

【在 d*******d 的大作中提到】
: 好,写点code攒人品:
: return 第k个.和原题要求稍微不一样一点.
: int findkth(int p, int q, int r, int k){
: queue q1, q2, q3;
: q1.push(p);
: q2.push(q);
: q3.push(r);
: int cur = p;
: for(int i =1; i<=k; i++){
: int h1 = q1.front();

1 (共1页)
进入JobHunting版参与讨论
相关主题
这道Amazon面试题怎么做Facebook interview 面经
问一个java的问题一个容易记忆的permutation算法
请教一个面试算法题请教amazon面试题
脸家电话面试面筋G家店面
贡献1个A家3面的面经,被老印坑了4sum的那道题
这题怎么做?请教leetcode的gray code
updae: 明天GOOG电面, 求祝福 interview 问题Leetcode一题(非OJ)
问一个题目[面试题求教]remove common phrases from each sentence
相关话题的讨论汇总
话题: int话题: cur话题: find话题: long话题: node