← Назад к вопросам

Перемещение нулей

2.0 Middle🔥 121 комментариев
#Теория тестирования

Условие

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

Пример

Вход: [0, 1, 0, 3, 12] Выход: [1, 3, 12, 0, 0]

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Понимание задачи

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

Подход

Используем двухпроходный алгоритм:

  1. Первый проход: переместить все ненулевые элементы в начало массива
  2. Второй проход: заполнить оставшиеся позиции нулями

Временная сложность: O(n) Пространственная сложность: O(1)

Реализация и тесты

def move_zeroes(nums: list[int]) -> None:
    """Перемещает все нули в конец массива. Модифицирует массив на месте."""
    non_zero_index = 0
    
    for i in range(len(nums)):
        if nums[i] != 0:
            nums[non_zero_index] = nums[i]
            non_zero_index += 1
    
    for i in range(non_zero_index, len(nums)):
        nums[i] = 0

Тест-кейсы для QA

class TestMoveZeroes:
    def test_example_case(self):
        nums = [0, 1, 0, 3, 12]
        move_zeroes(nums)
        assert nums == [1, 3, 12, 0, 0]
    
    def test_no_zeroes(self):
        nums = [1, 2, 3, 4, 5]
        move_zeroes(nums)
        assert nums == [1, 2, 3, 4, 5]
    
    def test_all_zeroes(self):
        nums = [0, 0, 0, 0]
        move_zeroes(nums)
        assert nums == [0, 0, 0, 0]
    
    def test_empty_array(self):
        nums = []
        move_zeroes(nums)
        assert nums == []
    
    def test_negative_numbers(self):
        nums = [-1, 0, 2, 0, -3, 0, 4]
        move_zeroes(nums)
        assert nums == [-1, 2, -3, 4, 0, 0, 0]

Ключевые аспекты QA

  • Граничные случаи: пустой массив, один элемент, все нули
  • Отрицательные числа: убедитесь, что они обрабатываются как ненулевые
  • Модификация на месте: проверяйте, что используется O(1) память
  • Порядок сохраняется: ненулевые элементы остаются в исходном порядке
Перемещение нулей | PrepBro