Skip to content

Move All Zeroes to End

Input: arr[] = {18, 13, 0, 30, 0, 40}
Output: arr[] = {18, 13, 30, 40, 0, 0}

Input: arr[] = {0, 0, 0, 20, 0}
Output: arr[] = {20, 0, 0, 0}

Input: arr[] = {50, 66}
Output: arr[] = {50, 66}

Noive Approach

package main

import (
    "fmt"
)

func main() {
    // arr := []int{18, 13, 0, 30, 0, 40} // [18 13 40 30 0 0]
    // arr := []int{0, 0, 0, 20, 0} // [20 0 0 0 0]
    arr := []int{50, 66} // [50 66]
    moveToEnd(arr)
    fmt.Println(arr)
}

func moveToEnd(arr []int) {
    for i := 0; i < len(arr); i++ {
        if arr[i] == 0 {
            for j := i + 1; j < len(arr); j++ {
                if arr[j] != 0 {
                    arr[i], arr[j] = swap(arr[i], arr[j])
                }
            }
        }
    }
}

func swap(a, b int) (int, int) {
    return b, a
}

Time Complexity: O(n*n)

Efficient Approach

package main

import (
    "fmt"
)

func main() {
    // arr := []int{18, 13, 0, 30, 0, 40} // [18 13 40 30 0 0]
    // arr := []int{0, 0, 0, 20, 0} // [20 0 0 0 0]
    arr := []int{50, 66} // [50 66]
    moveToEnd(arr)
    fmt.Println(arr)
}

func moveToEnd(arr []int) {
    count := 0
    for i := 0; i < len(arr); i++ {
        if arr[i] != 0 {
            arr[i], arr[count] = swap(arr[i], arr[count])
            count++
        }
    }
}

func swap(a, b int) (int, int) {
    return b, a
}

Time Complexity: O(n)