go: add «1122. Relative Sort Array»
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
parent
6a3f0058c0
commit
1e48c99bfb
1 changed files with 31 additions and 0 deletions
31
go/relative-sort-array.go
Normal file
31
go/relative-sort-array.go
Normal file
|
@ -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
|
||||||
|
}
|
Loading…
Reference in a new issue