Menu
CoddyTech

Search a 2D Matrix

Дана сетка целых чисел matrix с m строками и n столбцами, а также целое число target. Значения в каждой строке отсортированы по возрастанию, а первое значение каждой строки больше последнего значения предыдущей строки. Верните true, если target присутствует в сетке, и false в противном случае, за время O(log(m × n)).

Функция

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
сетка, заданная в виде списка строк, отсортированных построчно
targetinteger
значение, которое нужно найти
Возвращаетboolean
true, если цель находится в сетке, false в противном случае

Ограничения

  • 1 ≤ m, n ≤ 100, где m = matrix.length и n = matrix[i].length
  • Каждая строка имеет одинаковую длину n.
  • -104 ≤ matrix[i][j], target ≤ 104
  • Каждая строка отсортирована в строго возрастающем порядке, и первое значение каждой строки больше последнего значения предыдущей строки.

Примеры

Ввод
matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]target = 26
Вывод
true
Пояснение
Если читать построчно, 12 значений образуют один отсортированный список. При двоичном поиске по позициям от 0 до 11 проверяется 21 на позиции 5 (слишком мало), 33 на позиции 8 (слишком много), затем находится 26 на позиции 6.
challenge icon

Дополнительный вопрос

Предположим, строки могут иметь разную длину, но при этом оставаться отсортированными от начала до конца. Как преобразовать позицию в номер строки и столбца и какова будет стоимость поиска?

Сбросить код
def searchMatrix(matrix, target):
    # Напишите код здесь

Тест #1

Тест #2

Аргументы

matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]
target = 26

Ожидаемый вывод

true