arcbjorn

thoughtbook

RSS Feed

Sunday, February 19, 2023

Relative sort array

Leetcode 1122 problem.

Go

  • Time complexity: O(n)O(n) - n is a quantity of elements in array with maximum length
  • Auxiliary space: O(1)O(1) - constant amount of space
import "sort"

func relativeSortArray(arr1 []int, arr2 []int) []int {
    var result []int
    numberFrequencyArr1 := make(map[int]int)

    // hash map of frequency of numbers in arr1
    for _, v := range arr1 {
        numberFrequencyArr1[v]++
    }

    // take the equal elements of arr1 from the numberFrequencyArr1
    for _, num := range arr2 {
        currentFrequency := numberFrequencyArr1[num]
        
        for i := 0; i < currentFrequency; i++ {
            result = append(result, num)
        }

        // reset frequency in arr1
        numberFrequencyArr1[num] = 0
    }

    var uncommonNumbers []int
    for num, frequency := range numberFrequencyArr1 {
        for i := 0; i < frequency; i++ {
            uncommonNumbers = append(uncommonNumbers, num)
        }
    }

    sort.Ints(uncommonNumbers)
    result = append(result, uncommonNumbers...)

    return result
}
Creative Commons Licence