由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个算法题?
相关主题
一道面试题:matrix找第k大Amamon onsite 面经
两个Young tableau问题rebuild a tree from inorder and level order
一个GOOG的二叉树面试题大概说一下昨天的Google Phone Interview
请教一个BST找Median的题目树 inorder下个节点最好办法是啥
求教:binary search tree中找第i大的数inorder traversal and BST
merge two binary search treeRestore binary tree from preorder and inorder sequences
请教一个关于sort的问题一道G老题
Amazon的拒信,看着真让人生气攒人品,amazon一面经历
相关话题的讨论汇总
话题: inorder话题: 杨矩话题: array话题: ascending话题: 节点
进入JobHunting版参与讨论
1 (共1页)
F**********r
发帖数: 237
1
m*n matrix of integer, all rows and columns are sorted in ascending order.
Find the most efficient way to print out all numbers in ascending order.
偶就只能想到用个heap,显然不够优?请大侠指教!
e*****e
发帖数: 1275
2
这是young tableau 的老题阿。。。。。data structure 应该学过阿~~~
就从左角开始找好啦~~~
大雪天裸体跪求大牛找如下题名答案~~~
1. 给定M*N个不同的数,一共能生成多少个杨矩?如果允许数字有重复呢?
2. 给定杨矩,找k-th largest,复杂度多少?

【在 F**********r 的大作中提到】
: m*n matrix of integer, all rows and columns are sorted in ascending order.
: Find the most efficient way to print out all numbers in ascending order.
: 偶就只能想到用个heap,显然不够优?请大侠指教!

f*****w
发帖数: 2602
3
我对这题也有疑问 同等高手
b********n
发帖数: 29
4
http://stackoverflow.com/questions/4279524/how-to-sort-a-m-x-n-
在网上找到个类似的帖子。不知道他说的那个两行merge的方法他怎么算出来就是
O(m*n*log(min(m,n)))了。需要具体推一推。
我的想法是
1.找出min (m,n),如果是行方向,就按m行多路归并,如果是列方向,就按列方向多路
归并,假设m 2.每次多路归并时候因为这多路的队头元素是拍好序的,所以不需要O(m)时间找最小值
,只需要直接提取最小值。但是提取过最小值以后,此队列下一个元素要插入到原来排
好的那一组队头中,所以要用O(lg m)时间插入(二叉查找)。
3.这样的归并要进行m*n次。
4.所以时间复杂度是O(m*n*log(min(m,n)))
PS,二楼的高手能不能仔细讲讲那个杨矩啥的是咋回事,给点reference吧
e*****e
发帖数: 1275
5
我说了阿,young tableau 从左下角开始找啊~~~比较大小决定向上还是向右走,
O(n+m)的solution阿~~~
c****m
发帖数: 179
6

你这个只是查找的? 问题是从最小的(左上角)开始打印出sort出来的所有数。
不知道yangju对这个问题有什么快速解法?

【在 e*****e 的大作中提到】
: 我说了阿,young tableau 从左下角开始找啊~~~比较大小决定向上还是向右走,
: O(n+m)的solution阿~~~

e*****e
发帖数: 1275
7
阿~~~看错题目了~~~
汗~~~~
b********n
发帖数: 29
8
http://mathworld.wolfram.com/BumpingAlgorithm.html
我觉得他说的可能是这个。
可是和楼主问的应该不是很相关。
Bumping Algorithm是用来构造这样一个杨矩的,每插入一个新元素需要O(n+m)的时间。
楼主问的矩阵是杨矩的一个特例,可是问题在于是已经构造好的一个杨矩,要把它重新
恢复成sorted的顺序显然用O(n+m)是不可能的。O(n+m)连遍历矩阵一遍都不能完成。
我上面post的stackoverflow的帖子里的最佳回复也证明了为什么楼主的问题需要
O(n*m*log(min(m,n)))
s*****n
发帖数: 231
9
一个思路,参考堆排序这个例子:
1 2 7 10 21
3 4 8 11 22
5 6 9 12 23
13 14 15 27 28
斜着看这个矩阵,每个元素的右方和下方的紧邻,都比它大,所以每三个这样的组合都是
一个堆.
1.我们提取左上角的元素,打印输出,然后将他替换成一个最大的整数,让其跟它直接向
下和向右相邻的元素比较,选择一个最小的,交换;如是类推,直到此最大数无路可降.
2.重复1,知道第(m+n)个输出.
s*****n
发帖数: 231
10
复杂度 mnlog(max(m,n)).
a********e
发帖数: 80
11
复杂度O(M*N)
这个矩阵就可以看成一个BST,根在右上角,左边一格是左儿子,下边一格是右儿子。左边元素比自己
小的是左子树的节点,下边元素比自己大的是右子树节点。
然后中序遍历BST就可以了。
void InOrder(int x, int y, int low, int high)
{
if ((x>=0) && (x=0) && (y x][y]>=low))
{
InOrder(x, y-1, low, array[x][y]);
cout< InOrder(x+1, y, array[x][y], high);
}
}
s*****n
发帖数: 231
12
输入:
1 2 5
2 3 6
3 4 7
InOrder输出:
1 2 2 2 3 3 3 4 5 6 7
多了几个
a********e
发帖数: 80
13
标记一下判个重。还是O(M*N)

【在 s*****n 的大作中提到】
: 输入:
: 1 2 5
: 2 3 6
: 3 4 7
: InOrder输出:
: 1 2 2 2 3 3 3 4 5 6 7
: 多了几个

s*****n
发帖数: 231
14
输入:
1 2 5
2 7 8
3 8 9
InOrder:
1 2 2 5 7 8 8 8 9 (错误!)
BST要求所有左子树的节点都小于父节点,所有右子树节点都大于父节点,显然上面的
matrix不满足那个条件.
1 (共1页)
进入JobHunting版参与讨论
相关主题
攒人品,amazon一面经历求教:binary search tree中找第i大的数
攒人品,Amazon 二面面经merge two binary search tree
[合集] 微软面试的一道题请教一个关于sort的问题
那个kth maximum value in BST 用recursive怎么搞Amazon的拒信,看着真让人生气
一道面试题:matrix找第k大Amamon onsite 面经
两个Young tableau问题rebuild a tree from inorder and level order
一个GOOG的二叉树面试题大概说一下昨天的Google Phone Interview
请教一个BST找Median的题目树 inorder下个节点最好办法是啥
相关话题的讨论汇总
话题: inorder话题: 杨矩话题: array话题: ascending话题: 节点