Вывести повторяющиеся элементы массива

Задача

Из одномерного массива удалить все повторяющиеся элементы (дубликаты) так, чтобы каждое значение встречалось в массиве только один раз.

Похожие задачи

Решение

Проще всего решить данную задачу, используя второй массив, в котором и будут содержаться уникальные элементы.

Пусть исходный массив присвоен переменной a . В нем N — элементов. Второй массив обозначим b , количество элементов — M (сколько их мы не знаем, поэтому это переменная, а не константа).

Запишем первый элемент массива a в массив b. Переменной M присвоим 1.

Начинаем в цикле перебирать массив a, начиная со второго элемента и до конца (до N). Заранее предполагаем, что очередной элемент не встречается в массиве b, т. е. он не является повторяющимся. Отражаем это предположение в присвоении булевой переменной f значение True.

Во вложенном цикле перебираем все элементы массива b (до М). Если текущий элемент массива a совпадает по значению с каким-либо элементом массива b, то устанавливаем f в значение False. Это значит, что нам встретился дубликат, который должен быть удален.

После всех итераций внутреннего цикла проверяем значение f. Если оно осталось True, то элемент уникальный, его следует записать в массив b. Перед этим увеличиваем значение M на единицу (ведь количество элементов увеличилось).

Как удалить повторяющиеся элементы массива?

Похожие FAQ

Еще в этой же категории

Как Свернуть Массив? 2
НовыйМассив = Новый Массив; Соответствие = Новый Соответствие; Для каждого ЭлементМассива Из Массив Цикл Соответствие.Вставить(ЭлементМассива); КонецЦикла; Для каждого КлючИЗначение Из Соответствие Цикл НовыйМассив.Добавить(КлючИЗначение.Знач Структура

Создать структуру и добавить элементы 2
// Создание структуры СозданнаяСтруктура = Новый Структура; // Создание структуры и добавление элементов СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить(" Качество" , Качество); СтруктураОтбора.Вставить(" Номенклатура" , Номенкла Как создать Фиксированный массив? 2
ФиксированныйМассив , элементами которого могут быть значения перечисленных типов, включая ФиксированныйМассив. ФиксированныйМассив не допускает никаких изменений своего содержимого и может быть сконструирован из объекта типа " Массив" ; А если про Небольшой нюанс при создании двумерного массива 2
Наткнулся на инструкцию по созданию массива: ДвумМассив = Новый Массив; ОднмМассив = Новый Массив(2); //И дальше — заполнять ОднмМассив = "1-й индекс"; ОднмМассив = "1-е значение"; ДвумМассив.Добавить(ОднмМассив); ОднмМассив = "2-й индекс" Посмотреть все в категории Работа с Массивом, Структурой, Соответствием

есть массив massC в котором необходимо удалить повторяющиеся элементы ну и потом их сумму узнаьб на главное что меня интересует как удалить повторяющиеся

4 ответа 4

massA — исходные массив с повторяющимися значениями massB — результирующий массив без повторений massC — (в моём коде) временный рабочий массив

Контейнер std::unordered_set (C++11) помогает эффективно решать подобный задачки.

А уникальные элементы можно просто перемещать к началу, в том же массиве, затирая те элементы, которые уже встречались.

Update
Думаю, после комментариев и правки ответа рядом участников,
(первоначально код содержал if (s.find(a[i]) == s.end()) < . т.е. явно проводилась проверка наличия данных в множестве s )
имеет смысл подробнее посмотреть на функцию insert() , которая либо вставляет новый элемент в множество, либо сообщает о том, что такое значение в нем уже есть.

Эта функция возвращает вот такую пару значений:

Первый член пары указывает на элемент в множестве, а второй сообщает был ли элемент только что добавлен (true) или уже существовал (false).

Анализ этого члена и используется при подсчете суммы уникальных элементов массива и удалении дубликатов.

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

Оцените статью
Добавить комментарий