а вот так выглядит пример ввода?Сортировать по диагонали?Это интересный вид, чтобы быть уверенным.
Поскольку в следующей строке может быть значение, которое меньше любого значения в этой строке, вы не можете предполагать что-либо конкретное в отношении данной строки данных.
Я бы (если бы попросили сделать это на большом входе) прочитал бы матрицу в структуру списка, в которой данные были взяты в виде одной пары кортежа, а координата mxn - в качестве части кортежа, изатем быстро сортируйте матрицу один раз, затем найдите ее по значению.
В качестве альтернативы, если значение каждого отдельного местоположения уникально, сбросьте данные MxN в словарь с ключом значения, затем перейдите к словарной записи MxN на основе ключа ввода (или хеша).ключа ввода).
РЕДАКТИРОВАТЬ:
Обратите внимание, что ответ, который я даю выше, действителен, если вы собираетесь просматривать матрицу более одного раза.Если вам нужно разобрать его только один раз, то это так быстро, как вы можете это сделать:
for (int i = 0; i<M; i++)
for (int j=0; j<N; j++)
if (mat[i][j] == value) return tuple(i,j);
Очевидно, мой комментарий по этому вопросу также должен быть здесь: |
@ Сагар, но это не тот пример, который дал профессор.в противном случае у него был самый быстрый метод, описанный выше (сначала проверьте конец строки, затем продолжите). Кроме того, сначала быстрее проверяется конец середины строки, что немного похоже на двоичный поиск.
Проверкаконец каждой строки (и начинающийся в конце средней строки), чтобы найти число выше, чем проверенное число в массиве в памяти, был бы самым быстрым, затем выполнял бы бинарный поиск по каждой соответствующей строке, пока вы не найдете его.