我有一个矩阵(n * n),其所有列按非降序排序而行没有排序 - 我知道行中的每个值都小于所有值在下面的行中,但行内的值没有排序,尽管它们都比下面一行中的值更小或相同。
我需要在O(n)中找到此矩阵中的值。我想在其中一个列上运行二进制搜索,直到我进入一个与我的搜索值最接近的单元格(当然,我在搜索过程中没有找到该值)。
然后,我将检查单元格行和上面一行中的搜索值(如果是单元> searching_val)或下面的行(如果单元格< searching_val)。
会起作用吗?它是否也适用于列充满相同值的情况?
答案 0 :(得分:0)
我知道连续的每个值都小于
下面行中的所有值
这意味着行按升序排序
因此,从您的定义开始,行和列都是有序的。
通过这种方式,您可以将Matrix搜索为大小为n * n的数组。在这种情况下二进制搜索将:
O(log(n*n)) = O(2*log(n)) = O(log(n)) < O(n)
您只需定义一个以递增(或降序)顺序在Matrix中移动的索引。