Переключайте присутствие цвета в Set при каждом вхождении: первое добавляет, второе удаляет и так далее. В конце останутся цвета с нечётной частотой.
Цвета, появляющиеся нечетное количество раз
Переключайте присутствие цвета в Set при каждом вхождении: первое добавляет, второе удаляет и так далее. В конце останутся цвета с нечётной частотой.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо определить все элементы‑цвета из заданного списка, которые встречаются нечётное число раз, то есть у которых нет «пары».
List<String> colors = List.of("red", ..., "white", ..., "black");
Ответ
Переключайте присутствие цвета в Set при каждом вхождении: первое добавляет, второе удаляет и так далее. В конце останутся цвета с нечётной частотой.
Set<String> oddColors = new java.util.HashSet<>();
for (String color : colors) {
java.util.Objects.requireNonNull(color);
if (!oddColors.add(color)) oddColors.remove(color);
}
Ожидаемое время O(n), память O(k). Сравнение строк чувствительно к регистру: red и Red различаются. Порядок результата HashSet не задан; при необходимости его можно отсортировать. XOR годится для специального случая одного непарного числа, но не заменяет Set для списка всех непарных цветов.