由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 面试题
相关主题
amazon tel interview请教一下external sorting的问题
算法面试题刷题刷到没自信了
一个小公司面经问个面试题
merge k个数组怎样的方法好?用queue 做树的广度优先遍历,空间复杂度是多少?
一个特别的inplace merge two sorted arrays一个排列组合问题
re: 面试归来,上面经回馈各位战友google面经(挂了)
求一下这题解法。贡献一道面经,要求O(mn)
哪里有讲k-way merge的?[合集] 一道Google面试题
相关话题的讨论汇总
话题: matrix话题: mn话题: merge话题: nm话题: array
进入JobHunting版参与讨论
1 (共1页)
b*****t
发帖数: 296
1
请教一个面试题:
给定行列分别排序的矩阵,如何有序的输出所有元素:
比如:
1 2 2 25
1 2 4 26
1 2 4 30
1 3 100 101
输出:
1 1 1 1 2 2 2 2 3 4 4 25 26 30 100 101
b*****t
发帖数: 296
2
俺只知道一个O(nm)的算法。
g*******s
发帖数: 2963
3
O(nm)就是线性了吧?
r**h
发帖数: 1288
4
O(nm)是lower bound了吧?
请问一下O(nm)算法的思路是什么?
我能想到的是,假设矩阵大小是n*m,那么取m、n中较小的那个(假设是m)做m way
merge,时间复杂度是O(mn log m)

【在 b*****t 的大作中提到】
: 俺只知道一个O(nm)的算法。
l***8
发帖数: 149
5
I don't think O(nm) is possible. O(nm log(min(n,m)) is probably the best you
can do.
Consider the special case of a square nxn matrix, where elements along the
diagonal line A[0][k],A[1][k-1],A[2][k-2]...,A[k][0] have very small
differences in their values, yet are randomly ordered. By solving the 2D
sorting problem, you've effectively sorted every such diagnoal line.
u*****o
发帖数: 1224
6
我觉得是不是可以把POINTER放在左上角,就是第一个数1那里。然后不断比较1的右边
(2)还有1的下面(1)哪个大,小的那个(1)挪到它的右边或下面(第三行的的1),
再和大的数(2)比较。。。这样遍历一遍应该就可以的吧?
k*******t
发帖数: 144
7

如果是下面的matrix,貌似这个方法就不work啦。
[[1, 1, 2, 7],
[1, 2, 3, 8],
[2, 3, 5, 9],
[2, 5, 5, 10]]
当pointer一个指向3 (matrix[2][1]), 另一个指向 7(matrix[0][3]), 走下去会发现
3(matrix[1][2])会打印到5后面。

【在 u*****o 的大作中提到】
: 我觉得是不是可以把POINTER放在左上角,就是第一个数1那里。然后不断比较1的右边
: (2)还有1的下面(1)哪个大,小的那个(1)挪到它的右边或下面(第三行的的1),
: 再和大的数(2)比较。。。这样遍历一遍应该就可以的吧?

s*****r
发帖数: 43070
8
priority queue,先放(1,1),然后开始pop,每pop出一个,把其右边和下面的数放入
queue,如果queue里面已经有了,就不放
s*******e
发帖数: 1630
9
不对吧,pop了一个之后就加入了两个,然后从两个之中选小的pop,queue里边还有一
个,但这时候应该又加入两个吧,新加入的两个未必比剩余那个大啊

【在 s*****r 的大作中提到】
: priority queue,先放(1,1),然后开始pop,每pop出一个,把其右边和下面的数放入
: queue,如果queue里面已经有了,就不放

r*********n
发帖数: 4553
10
i agree. i don't think O(nm) is possible. this problem is similar to the
rank/selection problem for a 2-D matrix.

you

【在 l***8 的大作中提到】
: I don't think O(nm) is possible. O(nm log(min(n,m)) is probably the best you
: can do.
: Consider the special case of a square nxn matrix, where elements along the
: diagonal line A[0][k],A[1][k-1],A[2][k-2]...,A[k][0] have very small
: differences in their values, yet are randomly ordered. By solving the 2D
: sorting problem, you've effectively sorted every such diagnoal line.

相关主题
re: 面试归来,上面经回馈各位战友请教一下external sorting的问题
求一下这题解法。刷题刷到没自信了
哪里有讲k-way merge的?问个面试题
进入JobHunting版参与讨论
s*****r
发帖数: 43070
11
priority queue,这题就是个变形的BFS

【在 s*******e 的大作中提到】
: 不对吧,pop了一个之后就加入了两个,然后从两个之中选小的pop,queue里边还有一
: 个,但这时候应该又加入两个吧,新加入的两个未必比剩余那个大啊

u****0
发帖数: 155
12
用HashMap, O(mn) time, O(mn) space in worst case.
c******a
发帖数: 789
13
这个的时间复杂度是O(mn lgk), k是priority queue heap的高度吧。
要知道queue里已经放了没有,最简单的办法是一个m x n的boolean2维数组,空间复杂
度O(mn)。不知道我理解对了没。。
不过我最喜欢这个解法,简单易懂。

【在 s*****r 的大作中提到】
: priority queue,这题就是个变形的BFS
m*******i
发帖数: 34
14
为什么不能用merge sort, 是O(mn)吧?
望指正。
b****g
发帖数: 192
15
赞同,用BFS再加上一个heap保存当前最小值,就是O(mn lgk)。
BFS就是从左上角开始,bfs相同的值,一旦不同就终止此分支,把这个不同的值打入
min-heap。下次bfs从这个min-heap所存的最小值开始。
如此循环。
K最大就是m+n吧?没仔细想。

【在 c******a 的大作中提到】
: 这个的时间复杂度是O(mn lgk), k是priority queue heap的高度吧。
: 要知道queue里已经放了没有,最简单的办法是一个m x n的boolean2维数组,空间复杂
: 度O(mn)。不知道我理解对了没。。
: 不过我最喜欢这个解法,简单易懂。

g*******s
发帖数: 2963
16
同问

【在 m*******i 的大作中提到】
: 为什么不能用merge sort, 是O(mn)吧?
: 望指正。

u*****o
发帖数: 1224
17
MERGE SORT是指把原来的MATRIX分成两半,每一个是2*4的ARRAY, 然后MERGE两个
ARRAY是吗?
这样的话应该没问题吧
p****3
发帖数: 448
18
我是这么想的(假设n x n)
左上角肯定是最小值
右下角肯定是最大
那么每个包含的小矩阵也是最小值在左上角
选了[0][0]后有两个小矩阵的左上角是可能的下一个最小值
以此类推最多从n个数中选下一个最小值
最坏情况O(n^2 lgn)
但从n个数中选下一个最小值的情况很少出现(只有一次)
我猜还是O(n^2)
q*********3
发帖数: 470
19
不一定非要分两个array吧,把它看成个变形的merge sort,直接四个array也可以
merge啊,而且这题还有个使问题简化的信息,这个matrix是行和列都排好序的

【在 u*****o 的大作中提到】
: MERGE SORT是指把原来的MATRIX分成两半,每一个是2*4的ARRAY, 然后MERGE两个
: ARRAY是吗?
: 这样的话应该没问题吧

z****e
发帖数: 54598
20
新拿到的value可能出现在你作为cache的结构的任意一个位置
这样插入这个value就多了一次查找,所以是O(mn ln(min(m,n)))

【在 m*******i 的大作中提到】
: 为什么不能用merge sort, 是O(mn)吧?
: 望指正。

u*****o
发帖数: 1224
21
如果是MERGE 4个ARRAY的话就不能是o(mn)了吧。。虽然列也是排好的,但不能简化
COMPLEXITY,因为无法确定同一个数的右面和下面谁大,这样的话应该是mn(log(mn))
吧。。。
其实MERGE 2个ARRAY也是一样的。。我觉得用MERGE SORT只能达到mn(log(mn))。。
应该有更好的办法啊,因为给出的条件(行列都排好序)并没有充分利用啊。。

【在 q*********3 的大作中提到】
: 不一定非要分两个array吧,把它看成个变形的merge sort,直接四个array也可以
: merge啊,而且这题还有个使问题简化的信息,这个matrix是行和列都排好序的

1 (共1页)
进入JobHunting版参与讨论
相关主题
[合集] 一道Google面试题一个特别的inplace merge two sorted arrays
一道微软面试题re: 面试归来,上面经回馈各位战友
google电面2, 还就一个简单题求一下这题解法。
问一个amazon的数组排序题哪里有讲k-way merge的?
amazon tel interview请教一下external sorting的问题
算法面试题刷题刷到没自信了
一个小公司面经问个面试题
merge k个数组怎样的方法好?用queue 做树的广度优先遍历,空间复杂度是多少?
相关话题的讨论汇总
话题: matrix话题: mn话题: merge话题: nm话题: array