Для результата из примера нужно оставить первое вхождение каждого значения, а не удалить все значения, встречавшиеся несколько раз. LinkedHashSet сохраняет порядок первого появления.
Фильтрация списка от повторяющихся элементов
Для результата из примера нужно оставить первое вхождение каждого значения, а не удалить все значения, встречавшиеся несколько раз. LinkedHashSet сохраняет порядок первого появления.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Метод получает список целых чисел и возвращает новый список, из которого удалены все повторяющиеся значения.
Вход: [1, 4, 5, 4, 2, 1] Выход: [1, 4, 5, 2]
class Solution {
public List<Integer> filterDuplicates(List<Integer> numbers) {
// TODO
}
}
Ответ
Для результата из примера нужно оставить первое вхождение каждого значения, а не удалить все значения, встречавшиеся несколько раз. LinkedHashSet сохраняет порядок первого появления.
public List<Integer> filterDuplicates(List<Integer> numbers) {
java.util.Objects.requireNonNull(numbers);
return new java.util.ArrayList<>(new java.util.LinkedHashSet<>(numbers));
}
Из [1, 4, 5, 4, 2, 1] получится [1, 4, 5, 2]. Исходный список не меняется. Ожидаемое время O(n), дополнительная память O(k). Если во входе есть null, эта реализация сохраняет один null; при запрете таких элементов нужна предварительная валидация.