由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一个特别的inplace merge two sorted arrays
相关主题
re: 面试归来,上面经回馈各位战友A家面试题
哪位大写给说说 何时用 merge sort, 何时用 quick sort, 何时 heap sort问个简单的GooG题目
一个小公司面经问道排序题
再问一个算法题。求一下这题解法。
问一个merge k sorted array的问题哪里有讲k-way merge的?
问一道老题讨论,careercup150 的1.3
算法题:min heap inplace变 BST刷题刷到没自信了
请教一下external sorting的问题说说4sum的复杂度吧
相关话题的讨论汇总
话题: merge话题: sort话题: inplace话题: arrays话题: 题目
进入JobHunting版参与讨论
1 (共1页)
m******9
发帖数: 968
1
有个关于inplace merge的题目没想明白:
two sorted arrays A and B,size 分别为m和n,需要in place merge它们,不能用
extra space
一个常见的题目是:A中有足够的空间可以另外容纳下整个B。这个题目可以用的方法是
: 用merge sort中merge的办法,都从A和B的最后一个元素开始往前scan,A[i] B[j]
哪个大,就将大的放置在A的尾端,下次比较将大的放置在次尾端,依次进行下去。O(m+n)
比如:
A: 1 3 5 _ _ _ _
B: 2 4 6 8
output: A: 1 2 3 4 5 6 8
但是另外一个变形的题目是: A就是A,没有另外的空间可以容纳B。
即:
A: 1 3 5
B: 2 4 6 8
结果应当是:
A: 1 2 3
B: 4 5 6 8
我知道的一个方法是利用selection sort的思想,每次都从A B中select一个min放在最
左端,然后下次选择sec min放在次左端,依次下去。O(n^2)
这种题目,大家有什么好办法吗? 谢了
m******9
发帖数: 968
2
up
l***i
发帖数: 1309
3
For your second problem, why not dump the smallest numbers to A and the rest
to B(swap max in A with min in B), then sort A, B separately to get O(nlogn
). Heap sort can do this since you do not have O(n) extra storage.
g*******y
发帖数: 1930
4
分冶可以做到nlogn的in place merge
简单说就是在B中binary 搜索A的median的位置,然后交换两段,然后分冶
不过肯定不是最优了,不过我觉得对于面试的要求也许还行。

(m+n)

【在 m******9 的大作中提到】
: 有个关于inplace merge的题目没想明白:
: two sorted arrays A and B,size 分别为m和n,需要in place merge它们,不能用
: extra space
: 一个常见的题目是:A中有足够的空间可以另外容纳下整个B。这个题目可以用的方法是
: : 用merge sort中merge的办法,都从A和B的最后一个元素开始往前scan,A[i] B[j]
: 哪个大,就将大的放置在A的尾端,下次比较将大的放置在次尾端,依次进行下去。O(m+n)
: 比如:
: A: 1 3 5 _ _ _ _
: B: 2 4 6 8
: output: A: 1 2 3 4 5 6 8

l**s
发帖数: 50
5
quick sort nlogn

【在 g*******y 的大作中提到】
: 分冶可以做到nlogn的in place merge
: 简单说就是在B中binary 搜索A的median的位置,然后交换两段,然后分冶
: 不过肯定不是最优了,不过我觉得对于面试的要求也许还行。
:
: (m+n)

g*******y
发帖数: 1930
6
yes,
but, then, what's point of the problem?
I don't think this is a good interview problem after all.

【在 l**s 的大作中提到】
: quick sort nlogn
m******9
发帖数: 968
7
先用scan的方法,比如用2 pointer都从A B的左端开始scan,将smaller numbers都
swap到A
中,然后再sort B,例如用heap sort, quick sort
整体上是O(nlgn)

rest
O(nlogn

【在 l***i 的大作中提到】
: For your second problem, why not dump the smallest numbers to A and the rest
: to B(swap max in A with min in B), then sort A, B separately to get O(nlogn
: ). Heap sort can do this since you do not have O(n) extra storage.

m******9
发帖数: 968
8
小尾羊,能再具体一下吗?我没跟上你的思路,尤其是“交换两段”那部分?
多谢

【在 g*******y 的大作中提到】
: 分冶可以做到nlogn的in place merge
: 简单说就是在B中binary 搜索A的median的位置,然后交换两段,然后分冶
: 不过肯定不是最优了,不过我觉得对于面试的要求也许还行。
:
: (m+n)

1 (共1页)
进入JobHunting版参与讨论
相关主题
说说4sum的复杂度吧问一个merge k sorted array的问题
请教suffix array的问题问一道老题
贡献两个Amazon的电话面试题算法题:min heap inplace变 BST
FaceBook面经--第一部分请教一下external sorting的问题
re: 面试归来,上面经回馈各位战友A家面试题
哪位大写给说说 何时用 merge sort, 何时用 quick sort, 何时 heap sort问个简单的GooG题目
一个小公司面经问道排序题
再问一个算法题。求一下这题解法。
相关话题的讨论汇总
话题: merge话题: sort话题: inplace话题: arrays话题: 题目