27 lines
517 B
Go
27 lines
517 B
Go
package q1365
|
|
|
|
import "slices"
|
|
|
|
func smallerNumbersThanCurrent(nums []int) []int {
|
|
buf := make([]int, 2*len(nums))
|
|
|
|
positions := buf[0:len(nums)]
|
|
for i := range positions {
|
|
positions[i] = i
|
|
}
|
|
slices.SortFunc(positions, func(a, b int) int { return nums[a] - nums[b] })
|
|
|
|
nLesser := buf[len(nums):]
|
|
last := -1
|
|
for i, p := range positions {
|
|
if nums[p] == last {
|
|
nLesser[p] = nLesser[positions[i-1]]
|
|
} else {
|
|
last = nums[p]
|
|
nLesser[p] = i
|
|
}
|
|
}
|
|
return nLesser
|
|
}
|
|
|
|
var _ = smallerNumbersThanCurrent
|