给出一个算法,在n乘n的矩阵中找到给定的元素x(给出坐标),其中行和列是单调递增的。
我的想法:
减小问题集大小。
在第一列中,找到最大的元素=x。我们知道x必须在这一行或之前对矩阵的第一行和最后一行执行相同的操作。我们现在定义了一个子矩阵,如果x在矩阵中,它就在这个子矩阵中。现在在这个子矩阵上重复算法…沿着这条线的东西。
[雅克:又一个数组问题。]
最佳答案
我认为你不能期望超过可以达到的。(n是矩阵的宽度)。
为什么你不能期望更多
想象一下这样的矩阵:
0 0 0 0 0 0 ... 0 0 x
0 0 0 0 0 0 ... 0 x 2
0 0 0 0 0 0 ... x 2 2
.....................
0 0 0 0 0 x ... 2 2 2
0 0 0 0 x 2 ... 2 2 2
0 0 0 x 2 2 ... 2 2 2
0 0 x 2 2 2 ... 2 2 2
0 x 2 2 2 2 ... 2 2 2
x 2 2 2 2 2 ... 2 2 2
其中
O(N)
是一个未知数字(不是同一个数字,即每列中的数字可能不同)为了满足矩阵的单调性,可以在所有x
位置中放置0、1或2中的任何一个。所以,要找出矩阵中是否有1,你必须检查所有的x
位置,其中有N个。如何使其
x
假设您必须找到所有行的第一列指示符
O(n)
(一个给定的数字)从矩阵的右上角开始;如果看到的数字更大,则向左;否则向下。当你在最后一排时结束。你下去的地方就是你要找的地方如果其中任何一个有你搜索的号码,你就找到了。这个算法是
number > q
,因为在每个步骤中,您要么向左,要么向下总的来说,它不能超过左O(n)
次和下N
次。因此它是N
。关于algorithm - 单调递增二维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/746558/