Sobes.tech
Назад к вопросам
Junior
3

Расскажи, как устроено твоё решение первой задачи (нахождение уникальных элементов с сохранением последнего вхождения) и какова его сложность?

Компании, где спрашивали
ИП Ганус Александр Андреевич

Ответ от нейросети

sobes.tech AI

Для нахождения уникальных элементов с сохранением последнего вхождения можно пройтись по списку с конца к началу, сохраняя элементы во множество (Set) для отслеживания уже встреченных значений. При этом добавлять элементы в результат только если их ещё нет в множестве. После прохода нужно перевернуть результат, чтобы восстановить исходный порядок с последними вхождениями.

Пример на Dart:

List<T> uniqueLast<T>(List<T> list) {
  final seen = <T>{};
  final result = <T>[];
  for (var i = list.length - 1; i >= 0; i--) {
    if (!seen.contains(list[i])) {
      seen.add(list[i]);
      result.add(list[i]);
    }
  }
  return result.reversed.toList();
}

Сложность алгоритма — O(n), где n — длина списка, так как мы проходим по списку один раз и операции с множеством выполняются за амортизированное O(1).