UniLecs #148. Обработка массива

UniLecs #148. Обработка массива

UniLecs

Задача: дан массив целых чисел. Необходимо сдвинуть нулевые элементы в конец массива, сохранив при этом относительный порядок ненулувых элементов.

Входные данные: arr - массив целых чисел, размер массива от 1 до 10^3.

Элементы массива по модулю от 1 до 10^3.

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

Условие: использовать для преобразования исходный массив без использования доп. O(n) памяти, где n - размер исх.массива.

Пример:

  1. arr = [0, 0, -5, 4, 0, 2, 0]; Answer: arr = [-5, 4, 2, 0, 0, 0, 0]
  2. arr = [4, 0, 6, 0, 0, -5]; Answer: arr = [4, 6, -5, 0, 0, 0]
  3. 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 - размер исходного массива) занесем нули.

Реализация:

C#

https://gist.github.com/unilecs/69f497e0a68c99f58ec31b526c02d9ad

Test: https://dotnetfiddle.net/vUdfv9

Report Page