Постановка задачи. Найдите количество отрицательных целых чисел в матрице, отсортированной по строкам/столбцам.
Решение:
Понимание проблемы
Рассмотрим матрицу M с 3 строками и 4 столбцами как
Отрицательные целые числа в строке 1 равны 3
Отрицательные целые числа в строке 2 равны 1
Отрицательные целые числа в строке 3 равны 0
Таким образом, общее количество отрицательных целых чисел равно 3 + 1 + 0 = 4.
Наивное решение:
Начните с первого элемента M[0][0] и продолжайте считать, пока не встретите положительное число.
Повторите это для всех строк, а затем добавьте количество отрицательных чисел, найденных в каждой строке.
Сложность в худшем случае: если все элементы матрицы отрицательны, нам придется пройти всю матрицу. Таким образом, сложность будет O(nm), где n — количество строк, а m — количество столбцов.
Оптимальное решение:
Начните с последнего элемента строки M[0][m-1]
Пройдите влево и найдите отрицательное число, все числа слева от этого числа будут отрицательными, поэтому общее количество отрицательных элементов, присутствующих в этой строке, будет (индекс первого отрицательного элемента, встречающегося справа + 1)
Поскольку матрица отсортирована по столбцам, пройдите вниз по отрицательному числу, найденному в предыдущей строке, и повторите процесс шага 1.
Сложность этого подхода будет O(n+m)
Алгоритм:
M — матрица, n — количество строк, m — количество столбцов.