我认为你不能希望超过O(N),这是可以实现的.(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
Run Code Online (Sandbox Code Playgroud)
其中x是未知数字(不是相同的数字,即每列中可能是不同的数字).为了满足矩阵的单调性,您可以在所有位置放置0,1或2中的任何一个x.因此,要查找矩阵中是否有1,您必须检查所有x位置,并且有N个.
O(n)想象一下,您必须number > q为所有行找到带有(给定数字)的第一列标记.你从矩阵的右上角开始; 如果你看到的数字更大,你就走了; 否则就下去了.当你在最后一行时结束.你去的地方是你搜索的地方.如果他们中的任何一个有你搜索的号码,你就找到了它.
这个算法是O(n)因为在每个步骤中,你要么向左或向下.总的来说,它不会超过N剩余N时间和时间.因此,它O(n).