← Назад к вопросам
Перемещение нулей
2.0 Middle🔥 121 комментариев
#Теория тестирования
Условие
Дан массив целых чисел. Переместите все нули в конец массива, сохраняя порядок остальных элементов.
Пример
Вход: [0, 1, 0, 3, 12] Выход: [1, 3, 12, 0, 0]
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение
Понимание задачи
Задача требует переместить все нули в конец массива, сохраняя относительный порядок ненулевых элементов. Это классическая задача манипуляции массивами, которую QA должен уметь тестировать.
Подход
Используем двухпроходный алгоритм:
- Первый проход: переместить все ненулевые элементы в начало массива
- Второй проход: заполнить оставшиеся позиции нулями
Временная сложность: 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) память
- ✅ Порядок сохраняется: ненулевые элементы остаются в исходном порядке