add new solutions
This commit is contained in:
parent
ca24d0a56a
commit
0c73608ce5
36 changed files with 791 additions and 0 deletions
49
solutions/33/q3318/solution.go
Normal file
49
solutions/33/q3318/solution.go
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue