Цель — переместить все нули в конец массива, сохраняя относительный порядок ненулевых элементов. Решение должно работать на месте без дополнительных структур данных.
Подход использует двухпроходный алгоритм с одним указателем insertPos:
0function moveZeroes(nums) {
let insertPos = 0;
// First pass: shift non-zero elements to the front
for (const num of nums) {
if (num !== 0) nums[insertPos++] = num;
}
// Second pass: fill remaining positions with zeroes
while (insertPos < nums.length) nums[insertPos++] = 0;
}
insertPos отслеживает, куда должно быть записано следующее ненулевое значениеnums[insertPos], затем insertPos увеличиваетсяinsertPos до конца нулями 0Для входного массива [0, 1, 0, 3, 12]:
[1, 3, 12, 3, 12] (insertPos = 3)[1, 3, 12, 0, 0]O(n) — два линейных прохода по массивуO(1) — никаких дополнительных структур данных, полностью на местеУказатель insertPos отмечает позицию, где должен быть записан следующий ненулевой элемент во время первого прохода алгоритма.
Новый — ещё не проверен сообществом
Вы