diff --git a/go/relative-sort-array.go b/go/relative-sort-array.go new file mode 100644 index 0000000..82590ed --- /dev/null +++ b/go/relative-sort-array.go @@ -0,0 +1,31 @@ +package relative_sort_array + +import ( + "cmp" + "slices" +) + +func relativeSortArray(arr1 []int, arr2 []int) []int { + // remap the keys + keys := make(map[int]int, len(arr2)) + for i, x := range arr2 { + keys[x] = i + } + + // sort with the given keys + slices.SortFunc(arr1, func(x, y int) int { + xi, xFound := keys[x] + yi, yFound := keys[y] + + if !xFound { + xi = 1000 + x + } + if !yFound { + yi = 1000 + y + } + + return cmp.Compare(xi, yi) + }) + + return arr1 +}