Move Zeroes

https://leetcode.com/problems/move-zeroesEasy

Условие

Дан массив nums, переместите все нулевые элементы в конец, сохраняя относительный порядок ненулевых элементов.

Примеры

Input: nums = [0, 1, 0, 3, 12]

Output: [1, 3, 12, 0, 0]
Input: nums = [0]

Output: [0]

Решение

fun moveZeroes(nums: IntArray) {
    var lastNonZeroIndex = 0 // Индекс последнего ненулевого элемента

    // Перемещаем ненулевые элементы в начало массива
    for (i in nums.indices) {
        if (nums[i] != 0) {
            nums[lastNonZeroIndex] = nums[i] // Перемещаем ненулевое значение
            lastNonZeroIndex++ // Увеличиваем индекс последнего ненулевого элемента
        }
    }

    // Заполняем оставшиеся элементы нулями
    for (i in lastNonZeroIndex until nums.size) {
        nums[i] = 0
    }
}

Временная сложность

O(n), где n — количество элементов в массиве, так как мы проходим по массиву дважды.

Пространственная сложность

O(1), так как мы не используем дополнительную память, кроме нескольких переменных.