Skip to content

Commit

Permalink
Interview task: move zeroes to the end of array (qcha#187)
Browse files Browse the repository at this point in the history
  • Loading branch information
len4ass authored Jul 1, 2023
1 parent c27ecc3 commit 844afff
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
1 change: 1 addition & 0 deletions interview/algos/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@

## Разное

* [Передвинуть нули в конец массива](./move_zeroes.md)
* [Сумма двух чисел в массиве](./numbers_sum.md)
* [Уникальное число в массиве](./uinque_number_in_array.md)
48 changes: 48 additions & 0 deletions interview/algos/move_zeroes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Передвинуть нули в конец массива

## Условие

Дан массив целых чисел. Требуется передвинуть все нули в конец. Функция должна принимать массив целых чисел и менять его содержимое.

### Примеры

```java
[-1, 0, 2, 5, 8]

Ответ: [-1, 2, 5, 8, 0]
```

```java
[0, 2, 1, 4, 5]

Ответ: [2, 1, 4, 5, 0]
```

## Решение

Заведем переменную, которая будет служить индексом, на который нужно поставить ненулевой элемент. Начальное значение будет 0.

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

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

```java
public class Solution {
public static void moveZeroesToEnd(int[] numbers) {
int insertIndex = 0;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] != 0) {
numbers[insertIndex++] = numbers[i];
}
}

while (insertIndex < numbers.length) {
numbers[insertIndex++] = 0;
}
}
}
```

Время работы: O(N + K), где N - длина массива, K - количество нулей в массиве

Память: O(1)

0 comments on commit 844afff

Please sign in to comment.