add new solutions
This commit is contained in:
parent
886b5e0a8e
commit
67cad91898
47 changed files with 1549 additions and 1 deletions
58
solutions/25/q2542/solution.go
Normal file
58
solutions/25/q2542/solution.go
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
package q2542
|
||||
|
||||
import (
|
||||
"container/heap"
|
||||
"slices"
|
||||
)
|
||||
|
||||
type minHeap struct {
|
||||
data []int
|
||||
lessFn func(i, j int) bool
|
||||
}
|
||||
|
||||
func (m *minHeap) Len() int { return len(m.data) }
|
||||
func (m *minHeap) Less(i int, j int) bool { return m.lessFn(m.data[i], m.data[j]) }
|
||||
func (m *minHeap) Push(x any) { m.data = append(m.data, x.(int)) }
|
||||
func (m *minHeap) Swap(i int, j int) { m.data[i], m.data[j] = m.data[j], m.data[i] }
|
||||
|
||||
func (m *minHeap) Pop() any {
|
||||
last := m.data[len(m.data)-1]
|
||||
m.data = m.data[:len(m.data)-1]
|
||||
return last
|
||||
}
|
||||
|
||||
func maxScore(nums1 []int, nums2 []int, k int) int64 {
|
||||
indices := make([]int, len(nums1))
|
||||
for i := range indices {
|
||||
indices[i] = i
|
||||
}
|
||||
slices.SortFunc(indices, func(a, b int) int { return nums2[b] - nums2[a] })
|
||||
|
||||
mh := &minHeap{
|
||||
data: make([]int, 0, k),
|
||||
lessFn: func(a int, b int) bool { return nums1[a] < nums1[b] },
|
||||
}
|
||||
|
||||
sum := 0
|
||||
for i := range k {
|
||||
mh.data = append(mh.data, indices[i])
|
||||
sum += nums1[indices[i]]
|
||||
}
|
||||
heap.Init(mh)
|
||||
maxScore := sum * nums2[indices[k-1]]
|
||||
|
||||
for i := k; i < len(nums1); i++ {
|
||||
realI := indices[i]
|
||||
n1, n2 := nums1[realI], nums2[realI]
|
||||
if nums1[mh.data[0]] < n1 {
|
||||
sum = sum - nums1[mh.data[0]] + n1
|
||||
mh.data[0] = realI
|
||||
heap.Fix(mh, 0)
|
||||
maxScore = max(maxScore, sum*n2)
|
||||
}
|
||||
}
|
||||
|
||||
return int64(maxScore)
|
||||
}
|
||||
|
||||
var _ = maxScore
|
||||
Loading…
Add table
Add a link
Reference in a new issue