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