2016-05-27 2 views
-2

У меня есть коллекция с множеством элементов в ней. Эти предметы имеют некоторые свойства, но скажем, что 2 из них значительны в этом случае; Доступен и Приоритет. Доступным является простое свойство bool, тогда как приоритетом может быть любое число в диапазоне от 1 до 100. То, что мне нужно, - найти n количество элементов, которые являются последовательными, где все они доступны (== true) и имеют одинаковый приоритет , Я не ограничиваюсь только использованием коллекции, то есть я могу создать дополнительные структуры данных, чтобы ускорить процесс поиска (например, массив байтов, отображающий статусы таких элементов, как: 101010001).Поиск предметов с одинаковыми свойствами в коллекции

Если я должен визуализировать его немного:

1 [99], 0 [80], 1 [60], 1 [60], 0 [60]

1 и 0 показать доступность и номера в скобках показывают приоритет. Мне нужно найти 3-й и 4-й предметы.

Какой самый быстрый способ реализовать такой алгоритм?

Примечание: Это, конечно, не вопрос о домашнем задании.

EDIT: Я не могу изменить порядок элементов, ни удалить некоторые предметы из коллекции.

+0

Хранить все доступные задачи в отдельной коллекции и сортировать по приоритету? –

+0

HashMap имеет петлю O (1). Не могу сказать, что вы можете стать лучше этого. – FallAndLearn

+0

'которые являются последовательными' - так что вы не должны менять порядок? – MBo

ответ

0

Просто используйте HashMap для хранения элементов с помощью true. Ключ HashMap будет приоритетом, а значение будет его счетностью.

Наконец распечатайте те ключи, у которых value > 1.

Следовательно, вы можете завершить эту операцию в O(n) временной сложности, где n - общее количество элементов.

Смежные вопросы