假设我有一个已排序的矩阵 (MxN
)。
- 每行中的所有元素都按递增顺序排列
- 每列中的所有元素都按递增顺序排列
- 所有元素都为整数
不能进行其他假设
例子:
[1 5 8 20]
[2 9 19 21]
[12 15 25 30]
我需要查找给定的数字是否存在于矩阵中(基本搜索)。我有一种运行时间为 O(n)
的算法。
int row = 0;
int col = N-1;
while (row < M && col >= 0) {
if (mat[row][col] == elem) {
return true;
} else if (mat[row][col] > elem) {
col--;
} else {
row++;
}
}
但是我被要求提供一个 O(log (MxN)) == O(Log(n))
的解决方案。有什么想法吗??
n = MxN
,你怎么考虑将其视为一个数组进行搜索? - noMAD