Скажем, у меня есть матрица (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))
. Любые идеи?