func frequencySort(nums []int) []int {
freqCount := map[int]int{}
for _, v := range nums {
freqCount[v]++
}
freqs := []freqRecord{}
for val, freq := range freqCount {
freqs = append(freqs, freqRecord{
val: val,
freq: freq,
})
}
slices.SortFunc(freqs,
func(a, b freqRecord) int {
return cmp.Or( // return first non zero
cmp.Compare(a.freq, b.freq),
cmp.Compare(b.val, a.val),
)
},
)
res := make([]int, 0, len(nums))
for _, v := range freqs {
for range v.freq {
res = append(res, v.val)
}
}
return res
}
type freqRecord struct {
val int
freq int
}