09 Sept 2026Go / Python / TypeScriptEasy

Duplicate Zeros

Duplicate each zero in a fixed-length array while shifting later values and discarding overflow.

Build the logical expanded sequence only up to the original length, then copy it back so the input is modified in place as required.

complexity

O(n) time and O(n) auxiliary space.

solution files

  • Go duplicate-zeros/solution.go
  • Python duplicate-zeros/solution.py
  • TypeScript duplicate-zeros/solution.ts

Solution files

Goduplicate-zeros/solution.go
package main

func duplicateZeros(arr []int) {
	expanded := make([]int, 0, len(arr))
	for _, value := range arr {
		if len(expanded) == len(arr) {
			break
		}
		expanded = append(expanded, value)
		if value == 0 && len(expanded) < len(arr) {
			expanded = append(expanded, 0)
		}
	}
	copy(arr, expanded)
}
Pythonduplicate-zeros/solution.py
class Solution:
    def duplicateZeros(self, arr: list[int]) -> None:
        expanded: list[int] = []
        for value in arr:
            if len(expanded) == len(arr): break
            expanded.append(value)
            if value == class="syntax-number">0 and len(expanded) < len(arr): expanded.append(class="syntax-number">0)
        arr[:] = expanded
TypeScriptduplicate-zeros/solution.ts
function duplicateZeros(arr: number[]): void {
  const expanded: number[] = [];
  for (const value of arr) { if (expanded.length === arr.length) break; expanded.push(value); if (value === class="syntax-number">0 && expanded.length < arr.length) expanded.push(class="syntax-number">0); }
  for (let index = class="syntax-number">0; index < arr.length; index += class="syntax-number">1) arr[index] = expanded[index];
}