N — число элементов в матрице, а K — необходимое число элементов на хвосте отсортированного массива.
Заведем структуру MatrixEntry { value, row, column }.
Совсем тупое решение:
Сформируем массив размера N, обойдём нашу матрицу и запишем каждый её элемент в виде такой структуры в список. Список отсортируем и возьмём K последних элементов.
T = O(NlogN)
M = O(N)
Вариант поумнее:
Заведём MinHeap размера K, обходя матрицу будем вставлять в кучу новые MatrixEntry, поддерживая размер кучи, после завершения обхода в куче будет K максимальных элементов.
T = O(NlogK)
M = O(N)
Быстрый вариант:
www.e-maxx-ru.1gb.ru/algo/kth_order_statistics
Находим (N-K)-ю порядковую статистику на массиве элементов, затем обходим его, сравнивая элементы со статистикой. Если элемент больше найденной статистики, то выписываем его.
T = O(N)
M = O(N)