Какая структура данных лучше всего подходит для поиска и обновления целочисленных значений массива?
Если у меня есть массив как [7, 11, 13, 9, 4, 6], а пользовательский ввод - 10,
я хочу, чтобы целое число чуть выше (или равное) 10 (в данном случае 11) и заменило его целым числом - 10 (11 - 10)
Я не могу упорядочить список и бинарный поиск, так как мне нужно вернуть индекс обновленного элемента.
Я посмотрел на упорядочивание пар (индекс, целое число), а затем на двоичный поиск, но после обновления мне нужно пересортировать массив пар для следующего ввода пользователя.
исходный массив = [7, 11, 13, 9, 4, 6]
отсортированный массив = [4, 6, 7, 9, 11, 13]
пользовательский ввод = 10
вывод = 1 (индекс обновленного целого числа)
обновленный отсортированный массив = [4, 6, 7, 9, 1, 13]
повторно отсортированный массив = [1, 4, 6, 7, 9, 13]
пользовательский ввод = 4
...
Какая структура данных будет подходящей для реализации этого?
1 ответ
Вы можете использовать упорядоченный набор для хранения (значения, индекса) кортежей. Вы можете определить собственные функции сравнения в соответствии с вашей целью (это зависит от рассматриваемого языка программирования).
Операции с упорядоченным множеством включают:
- Добавьте элемент.
- Удалить элемент.
- Найдите элемент.
- Искать элемент, больший или равный заданному.
- Искать элемент больше заданного.
Данная проблема может быть решена с помощью упорядоченного набора операций, описанных выше.
Некоторые языки программирования (например, набор в C++) имеют предопределенные структуры данных, поэтому вам не нужно реализовывать их с нуля (только для использования). Внутренняя реализация упорядоченного набора обычно представляет собой красно-черное дерево (C++) или дерево AVL.
Проверьте, есть ли в вашем языке программирования встроенный упорядоченный набор или используйте какую-либо библиотеку, которая его включает. Это очень полезная и распространенная структура данных, поэтому ее нетрудно найти.