#arrays #data-structures #hashmap #binary-search #avl-tree
#массивы #структуры данных #hashmap #двоичный поиск #avl-дерево
Вопрос:
Если у меня есть массив в виде [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:
Вы можете использовать упорядоченный набор для хранения кортежей (значений, индексов). Вы можете определить пользовательские функции сравнения в соответствии с вашей целью (это зависит от рассматриваемого языка программирования).
Операции упорядоченного набора включают:
- Добавьте элемент.
- Удалите элемент.
- Поиск элемента.
- Поиск элемента, большего или равного заданному элементу.
- Поиск элемента, превышающего заданный элемент.
Данная проблема может быть решена с использованием упорядоченного набора с операциями, как описано выше.
Некоторые языки программирования (например, set в c ) имеют предопределенные структуры данных, поэтому вам не нужно реализовывать их с нуля (только для использования). Внутренняя реализация упорядоченного набора обычно представляет собой красно-черное дерево (c ) или дерево AVL.
Проверьте, есть ли в вашем языке программирования встроенный упорядоченный набор, или используйте какую-нибудь библиотеку, которая его включает. Это очень полезная и распространенная структура данных, поэтому ее не должно быть сложно найти.