Мне недавно дали этот вопрос интервью, и мне любопытно, каким было бы хорошее решение для этого.
Скажем, у меня есть 2d массив, где все числа в массиве расположены в порядке возрастания слева направо и сверху вниз.
Каков наилучший способ поиска и определения, находится ли целевое число в массиве?
Теперь мое первое желание - использовать бинарный поиск, так как мои данные отсортированы. Я могу определить, находится ли число в одной строке за O (log N) времени. Тем не менее, это 2 направления, которые сбивают меня с толку.
Другое решение, которое, как я думал, может сработать, - начать где-то посередине. Если среднее значение меньше, чем моя цель, то я могу быть уверен, что оно находится в левой квадратной части матрицы от середины. Затем я двигаюсь по диагонали и снова проверяю, уменьшая размер квадрата, в котором потенциально может находиться цель, пока я не отточу целевое число.
У кого-нибудь есть хорошие идеи по решению этой проблемы?
Пример массива:
Сортировка слева направо, сверху вниз.
1 2 4 5 6
2 3 5 7 8
4 6 8 9 10
5 8 9 10 11