Если я правильно понял вашу проблему, вы на самом деле пытаетесь создать алгоритм линейной сортировки по времени (с учетом входного размера чисел M).
Это НЕ возможно.
Ваш текущий подход состоит в том, чтобы иметь отсортированный список возможных значений.
Это занимает линейное время до количества возможных значений N (теоретически, учитывая, что поиск карты занимает O (1) время).
Лучшее, что вы могли бы сделать, это отсортировать значения (вы нашли на карте) с помощью метода быстрой сортировки (O (MlogM), например, быстрой сортировки, слияния и т. Д.) Для небольших значений M и, возможно, выполнить линейный поиск для больших значения М.
Например, если N равно 100000, а M равно 100, гораздо быстрее использовать алгоритм сортировки.
Я надеюсь, вы понимаете, что я говорю. Если у вас остались вопросы, я постараюсь на них ответить :)
редактировать: (комментарий)
Я далее объясню, что я имею в виду.
Скажем, вы знаете, что ваши цифры будут в диапазоне от 1 до 100.
Они где-то отсортированы (на самом деле они отсортированы «естественно»), и вы хотите получить их подмножество в отсортированной форме.
Если бы можно было сделать это быстрее, чем O (N) или O (MlogM), алгоритмы сортировки просто использовали бы этот метод для сортировки.
F.e. имея набор чисел {5,10,3,8,9,1,7}, зная, что они являются подмножеством отсортированного набора чисел {1,2,3,4,5,6,7,8 , 9,10} Вы все еще не можете отсортировать их быстрее, чем O (N) (N = 10) или O (MlogM) (M = 7).