lc-go/solutions/33/q3318/solution.go
2026-01-13 00:14:04 +09:00

49 lines
842 B
Go

package q3318
import "slices"
type NumOccur struct {
num, occur int
}
func xSum(x int, occurances map[int]int, buf []NumOccur) int {
buf = buf[:]
for n, o := range occurances {
buf = append(buf, NumOccur{n, o})
}
slices.SortFunc(buf, func(a, b NumOccur) int {
if a.occur != b.occur {
return b.occur - a.occur
}
return b.num - a.num
})
sum := 0
for i := 0; i < x && i < len(buf); i++ {
sum += buf[i].num * buf[i].occur
}
return sum
}
func findXSum(nums []int, k int, x int) []int {
ret := make([]int, len(nums)-k+1)
buf := make([]NumOccur, k)
occur := make(map[int]int, k)
for i := range nums {
occur[nums[i]]++
if i >= k {
occur[nums[i-k]]--
if occur[nums[i-k]] == 0 {
delete(occur, nums[i-k])
}
}
if i >= k-1 {
ret[i-k+1] = xSum(x, occur, buf)
}
}
return ret
}
var _ = findXSum