由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - twittier的onsite挂了,来问个常见题
相关主题
leetcode 上的k way merge我想说,我的A家电面,绝对是被烙印黑了,两个45分钟两个烙印
请教关于build heap BIG-O的问题LinkedIn面经(已跪),攒个rp
发个evernote的code challengeG家面经
问道indeed面试算法题f电面面筋,
上午偷闲把TopKFrequentWords写出来了题都感觉做对了,面试的人也满意,为什么二面过后还是直接悲剧呢……顺便上P面经
F家一面题,攒人品Yelp面经+题目讨论
周末上道题一道design题
问一道题(9)过去n小时的top search
相关话题的讨论汇总
话题: nlogk话题: memory话题: klogn话题: heap话题: twittier
进入JobHunting版参与讨论
1 (共1页)
l******i
发帖数: 194
1
k nearest points,k most frequent words这种,或者一个n长的array或者什么东西
,output top k elements,到底怎
么做啊~能不能给点code~
m*********a
发帖数: 3299
2
minHeap

【在 l******i 的大作中提到】
: k nearest points,k most frequent words这种,或者一个n长的array或者什么东西
: ,output top k elements,到底怎
: 么做啊~能不能给点code~

l*****a
发帖数: 14598
3
1) O(NlogK) O(K) memory
2) O(KlogN) O(N) memory
3) O(N) O(N) memory

【在 l******i 的大作中提到】
: k nearest points,k most frequent words这种,或者一个n长的array或者什么东西
: ,output top k elements,到底怎
: 么做啊~能不能给点code~

h***k
发帖数: 161
4
第二个为什么不是O(NlogK)呢?
我的想法是先hashmap把所有words数一遍,O(N) memory+time, 然后用k-size的
minheap遍历hashmap,总共是O(NlogK)。

【在 l*****a 的大作中提到】
: 1) O(NlogK) O(K) memory
: 2) O(KlogN) O(N) memory
: 3) O(N) O(N) memory

w*******i
发帖数: 186
5
时间复杂度都是o(n)吧?本质都是top k问题,马甲不同而已啊。改下comparator,
然后还是用 select algorithm不就行了。
x***j
发帖数: 75
6
第一个用heap。
第二个是啥?
第三个我猜 quick select?

【在 l*****a 的大作中提到】
: 1) O(NlogK) O(K) memory
: 2) O(KlogN) O(N) memory
: 3) O(N) O(N) memory

h***k
发帖数: 161
7
agree, 同没看懂第二个

【在 x***j 的大作中提到】
: 第一个用heap。
: 第二个是啥?
: 第三个我猜 quick select?

l******i
发帖数: 194
8
给点代码啊~大神们!!!
r*******e
发帖数: 971
9
以Top K frequent 为例。
1) Min Heap
2) Max Heap
3) Quick Select

【在 x***j 的大作中提到】
: 第一个用heap。
: 第二个是啥?
: 第三个我猜 quick select?

h***k
发帖数: 161
10
原来如此

【在 r*******e 的大作中提到】
: 以Top K frequent 为例。
: 1) Min Heap
: 2) Max Heap
: 3) Quick Select

相关主题
F家一面题,攒人品我想说,我的A家电面,绝对是被烙印黑了,两个45分钟两个烙印
周末上道题LinkedIn面经(已跪),攒个rp
问一道题(9)G家面经
进入JobHunting版参与讨论
s********l
发帖数: 998
11
我也这么想的
lollol 说说 为什么 klogn啊?

【在 h***k 的大作中提到】
: 第二个为什么不是O(NlogK)呢?
: 我的想法是先hashmap把所有words数一遍,O(N) memory+time, 然后用k-size的
: minheap遍历hashmap,总共是O(NlogK)。

r*******e
发帖数: 971
12
遍历HashMap 与List 的contains 有类似之处。
都是存在但是不到万不得已不要用的方法。

【在 h***k 的大作中提到】
: 第二个为什么不是O(NlogK)呢?
: 我的想法是先hashmap把所有words数一遍,O(N) memory+time, 然后用k-size的
: minheap遍历hashmap,总共是O(NlogK)。

i*********7
发帖数: 348
13
楼上的回答的基本差不多,我就归纳一下吧。
个人理解是这样的,这类型题目基本就两个思路
1. minHeap(PriorityQueue) O(nlogk) time o(k) memory
2. Ranking partitioning(Quicksort的一步) O(N) time no memory(递归call stack
算上的话另说)
minHeap的好处是你可以按序获取前k个,Ranking Partitioning则没有这个功能,只能
帮你找到第k个和前面k - 1个的那一块儿。根据题目采取不同得方案呗。
h***k
发帖数: 161
14
有大牛指出来是用max-heap

【在 s********l 的大作中提到】
: 我也这么想的
: lollol 说说 为什么 klogn啊?

h***k
发帖数: 161
15
遍历hashmap的entry就是把array从头到尾扫一遍吧,list的contains是全部扫一遍找
到对应的为止吧。
都是O(n), 这里的遍历hashmap不存在查找的问题吧。。请指教

【在 r*******e 的大作中提到】
: 遍历HashMap 与List 的contains 有类似之处。
: 都是存在但是不到万不得已不要用的方法。

r*******e
发帖数: 971
16
遍历HashMap实际上是个O(capacity) 最坏情况接近于o(2 *n)虽然还是O(n)不
过这题最直接解法也就是这个了。
不那么直接的解法:做个Prefix Tree(Trie),这里需要保证所有word 都只有小写字
母,其实限制很大。
非常不直接的解法:假如知道总数:那么可以做个倒序表:HashSet《String》[total
size+1];统计词频时,将单词从倒序表原来位置上删除,放到+1的位置。这两个
都是O(1)操作,所以平均在O(n+k)的时间内即可完成。不过注意得把HashSet的
capacity调得比较小才行,否则又会出现第一段的窘境。
坏处是在极端情况,(无重复单词)复杂度会成为o(2n+2k)囧。

【在 h***k 的大作中提到】
: 遍历hashmap的entry就是把array从头到尾扫一遍吧,list的contains是全部扫一遍找
: 到对应的为止吧。
: 都是O(n), 这里的遍历hashmap不存在查找的问题吧。。请指教

r*******e
发帖数: 971
17
错了Trie不能用来排序,只能省空间以及方便后续查找。
倒序表倒是可以试试,我写一个看看啥么样。

total

【在 r*******e 的大作中提到】
: 遍历HashMap实际上是个O(capacity) 最坏情况接近于o(2 *n)虽然还是O(n)不
: 过这题最直接解法也就是这个了。
: 不那么直接的解法:做个Prefix Tree(Trie),这里需要保证所有word 都只有小写字
: 母,其实限制很大。
: 非常不直接的解法:假如知道总数:那么可以做个倒序表:HashSet《String》[total
: size+1];统计词频时,将单词从倒序表原来位置上删除,放到+1的位置。这两个
: 都是O(1)操作,所以平均在O(n+k)的时间内即可完成。不过注意得把HashSet的
: capacity调得比较小才行,否则又会出现第一段的窘境。
: 坏处是在极端情况,(无重复单词)复杂度会成为o(2n+2k)囧。

s********l
发帖数: 998
18
我知道是 max-heap 但是觉得复杂度是 O(NlogK) 不是klogn

【在 h***k 的大作中提到】
: 有大牛指出来是用max-heap
h***k
发帖数: 161
19
赞一个,考虑的很细致!
期待倒序表的解法。。

total

【在 r*******e 的大作中提到】
: 遍历HashMap实际上是个O(capacity) 最坏情况接近于o(2 *n)虽然还是O(n)不
: 过这题最直接解法也就是这个了。
: 不那么直接的解法:做个Prefix Tree(Trie),这里需要保证所有word 都只有小写字
: 母,其实限制很大。
: 非常不直接的解法:假如知道总数:那么可以做个倒序表:HashSet《String》[total
: size+1];统计词频时,将单词从倒序表原来位置上删除,放到+1的位置。这两个
: 都是O(1)操作,所以平均在O(n+k)的时间内即可完成。不过注意得把HashSet的
: capacity调得比较小才行,否则又会出现第一段的窘境。
: 坏处是在极端情况,(无重复单词)复杂度会成为o(2n+2k)囧。

h***k
发帖数: 161
20
min-heap的话是建一个k大小的堆,遍历完所有N个后剩下的是k个最大的,所以是O(
NlogK)
如果用max-heap的话就是用N大小的堆,建堆需要O(N)的时间,堆顶是最大的值,取K次
,总共是O(KlogN + N)

【在 s********l 的大作中提到】
: 我知道是 max-heap 但是觉得复杂度是 O(NlogK) 不是klogn
1 (共1页)
进入JobHunting版参与讨论
相关主题
过去n小时的top search上午偷闲把TopKFrequentWords写出来了
问一个面试经常问的ood,维护前k名的list的问题F家一面题,攒人品
到底什么是priority queue啊?周末上道题
菜鸟向大家请教个面试题问一道题(9)
leetcode 上的k way merge我想说,我的A家电面,绝对是被烙印黑了,两个45分钟两个烙印
请教关于build heap BIG-O的问题LinkedIn面经(已跪),攒个rp
发个evernote的code challengeG家面经
问道indeed面试算法题f电面面筋,
相关话题的讨论汇总
话题: nlogk话题: memory话题: klogn话题: heap话题: twittier