UniLecs #148. Обработка массива
UniLecsЗадача: дан массив целых чисел. Необходимо сдвинуть нулевые элементы в конец массива, сохранив при этом относительный порядок ненулувых элементов.
Входные данные: arr - массив целых чисел, размер массива от 1 до 10^3.
Элементы массива по модулю от 1 до 10^3.
Вывод: преобразовать массив таким образом, чтобы все нулевые элементы оказались в конце массива, а относит.порядок ненулевых элементов сохранился.
Условие: использовать для преобразования исходный массив без использования доп. O(n) памяти, где n - размер исх.массива.
Пример:
- arr = [0, 0, -5, 4, 0, 2, 0]; Answer: arr = [-5, 4, 2, 0, 0, 0, 0]
- arr = [4, 0, 6, 0, 0, -5]; Answer: arr = [4, 6, -5, 0, 0, 0]
- arr = [1, 2, 3, 4, 5, 6]; Answer: arr = [1, 2, 3, 4, 5, 6]
Идея: заведем счетчик K ненулевых элементов. Очередной ненулевой элемент массива положим на K-е место в исходном массиве, после увеличим счетчик K. Нулевые элементы пропускаем. После завршения такой обработки, в исходном массиве первые элементы (от 0 до K - 1) будут ненулевыми.
Дальше в остальные ячейки (от K до N - 1, где N - размер исходного массива) занесем нули.
Реализация:
https://gist.github.com/unilecs/69f497e0a68c99f58ec31b526c02d9ad