Skip to content

Remove Duplicates from Sorted Array

Input: arr[] = {12, 15, 15, 20, 20, 20, 20}
length: 7
Output: arr[] = {12, 15, 20}
length: 3

Input: arr[] = {16, 16, 16}
length: 3
Output: arr[] = {16}
length: 1

Naive Approach

package main

import (
    "fmt"
)

func main() {
    // arr := []int{12, 15, 15, 20, 20, 20, 20} // [12 15 20]
    arr := []int{16, 16, 16} // [16]
    result := removeDups(arr)
    fmt.Println("arr[] =", result)
    fmt.Println("length =", len(result))
}

func removeDups(arr []int)  []int {
    var temp []int
    temp = append(temp, arr[0])
    result := 1
    for i := 1; i < len(arr); i++ {
        if temp[result-1] != arr[i] {
            temp = append(temp, arr[i])
            result++
        }
    }
    for i := 0; i < result; i++ {
        arr[i] = temp[i]
    }
    return arr[:result]
}

Time Complexity: O(n) Space Complexity: O(n)

Efficient Approach

package main

import (
    "fmt"
)

func main() {
    // arr := []int{12, 15, 15, 20, 20, 20, 20} // [12 15 20]
    arr := []int{16, 16, 16} // [16]
    result := removeDups(arr)
    fmt.Println("arr[] =", result)
    fmt.Println("length =", len(result))
}

func removeDups(arr []int) []int {
    result := 1
    for i := 1; i < len(arr); i++ {
        if arr[i] != arr[result-1] {
            arr[result] = arr[i]
            result++
        }
    }
    return arr[:result]
}

Time Complexity: O(n) Space Complexity: O(1)

Note: we are using result variable to keep track to unique elements in array.