Напишите программу, которая осуществляет сжатие массива – заменяет все повторяющиеся элементы нулями и перемещает
Напишите программу, которая осуществляет "сжатие массива" – заменяет все повторяющиеся элементы нулями и перемещает все нулевые элементы в конец массива. При этом все оставшиеся элементы сохраняются в начале массива в том же порядке, что и в исходном массиве. Входные данные: первая строка содержит размер массива n. Во второй строке через пробел записаны n чисел – элементы массива. Гарантируется, что 0 < n ≤ 10000. Выходные данные: программа должна вывести все элементы получившегося массива в одну строку, разделив их пробелами. Примеры. Входные данные: 6 0 1 2 1 2 3. Выходные данные.
27.11.2023 10:33
Описание:
Сжатие массива можно выполнить следующим образом:
1. Создаем новый массив и задаем начальное значение индекса нового массива `new_idx = 0`.
2. Проходимся по всем элементам исходного массива с помощью цикла `for`.
3. Если текущий элемент отличается от предыдущего элемента или предыдущего элемента равен нулю, то добавляем его в новый массив и увеличиваем значение `new_idx` на 1.
4. После завершения цикла добавляем нули в конец нового массива, заполняя оставшуюся часть нового массива нулями.
5. Выводим все элементы нового массива через пробел.
Например:
Входные данные: `6 0 1 2 1 2 3`
1. Создание нового массива:
- Исходный массив: `[0, 1, 2, 1, 2, 3]`
- Новый массив: `[0, 1, 2, 1, 2, 3]`
- `new_idx = 6`
2. Обработка массива:
- Текущий элемент 0 равен предыдущему элементу 0. Ничего не меняем.
- Текущий элемент 1 не равен предыдущему элементу 0. Добавляем его в новый массив и увеличиваем `new_idx` на 1: `[0, 1]`, `new_idx = 7`.
- Текущий элемент 2 не равен предыдущему элементу 1. Добавляем его в новый массив и увеличиваем `new_idx` на 1: `[0, 1, 2]`, `new_idx = 8`.
- Текущий элемент 1 не равен предыдущему элементу 2. Добавляем его в новый массив и увеличиваем `new_idx` на 1: `[0, 1, 2, 1]`, `new_idx = 9`.
- Текущий элемент 2 не равен предыдущему элементу 1. Добавляем его в новый массив и увеличиваем `new_idx` на 1: `[0, 1, 2, 1, 2]`, `new_idx = 10`.
- Текущий элемент 3 не равен предыдущему элементу 2. Добавляем его в новый массив и увеличиваем `new_idx` на 1: `[0, 1, 2, 1, 2, 3]`, `new_idx = 11`.
3. Добавление нулей в конец нового массива:
- Заполняем оставшуюся часть нового массива нулями до размера исходного массива: `[0, 1, 2, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0...]`.
4. Вывод получившегося массива: `0 1 2 1 2 3 0 0 0 0 0 0 0 0...`
Совет:
Чтобы лучше понять алгоритм, можно представить его в виде таблицы, где в строках указаны элементы исходного и нового массивов, а в столбцах - шаги алгоритма.
Дополнительное упражнение:
Дан массив `[0, 1, 1, 2, 2, 2, 3, 3, 4, 4]`. Какой будет результат сжатия массива?
Описание:
Для решения данной задачи мы можем использовать два указателя - один для элементов, которые нужно сохранить в начале массива, и второй для элементов, которые нужно заменить нулями.
Мы начинаем с первого элемента и двигаемся по массиву, запоминая каждый уникальный элемент. Если мы находим дубликат, мы заменяем его на ноль и передвигаем указатель для нулей вправо. Далее просто выводим все элементы массива в одну строку.
Дополнительный материал:
Входные данные: 6 0 1 2 1 2 3.
Шаг 1: Первый элемент - 0. Запоминаем его. Пропускаем дубликаты.
Шаг 2: Второй элемент - 1. Запоминаем его. Пропускаем дубликаты.
Шаг 3: Третий элемент - 2. Запоминаем его. Пропускаем дубликаты.
Шаг 4: Четвертый элемент - 1. Это дубликат, заменяем его на 0 и передвигаем указатель для нулей вправо.
Шаг 5: Пятый элемент - 2. Это дубликат, заменяем его на 0 и передвигаем указатель для нулей вправо.
Шаг 6: Шестой элемент - 3. Запоминаем его. Пропускаем дубликаты.
Результирующий массив: 0 1 2 0 0 3
Совет:
Чтобы упростить задачу, можно разбить её на подзадачи. Сначала решите, как определить дубликаты и заменять их нулями. Затем решите, как перемещать нулевые элементы в конец массива. Не забудьте завести отдельный указатель для элементов, которые нужно заменить на нули и перемещать их в конец массива.
Практика:
Напишите программу на Python, которая реализует сжатие массива, как описано выше. Входные данные можно принимать с клавиатуры, а результат выводить на экран.