add new solutions
This commit is contained in:
parent
886b5e0a8e
commit
67cad91898
47 changed files with 1549 additions and 1 deletions
52
solutions/0/q23/solution.go
Normal file
52
solutions/0/q23/solution.go
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
package q23
|
||||
|
||||
import "container/heap"
|
||||
|
||||
type ListNode struct {
|
||||
Val int
|
||||
Next *ListNode
|
||||
}
|
||||
|
||||
type MinNodeHp []*ListNode
|
||||
|
||||
func (m *MinNodeHp) Len() int { return len(*m) }
|
||||
func (m *MinNodeHp) Less(i int, j int) bool { return (*m)[i].Val < (*m)[j].Val }
|
||||
func (m *MinNodeHp) Push(x any) { *m = append(*m, x.(*ListNode)) }
|
||||
func (m *MinNodeHp) Swap(i int, j int) { (*m)[i], (*m)[j] = (*m)[j], (*m)[i] }
|
||||
|
||||
func (m *MinNodeHp) Pop() any {
|
||||
*m = (*m)[:len(*m)-1]
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ heap.Interface = &MinNodeHp{}
|
||||
|
||||
func mergeKLists(lists []*ListNode) *ListNode {
|
||||
hp := make(MinNodeHp, 0, len(lists))
|
||||
for i := range lists {
|
||||
if lists[i] != nil {
|
||||
hp = append(hp, lists[i])
|
||||
}
|
||||
}
|
||||
heap.Init(&hp)
|
||||
|
||||
head := &ListNode{}
|
||||
tail := head
|
||||
|
||||
for len(hp) > 0 {
|
||||
tail.Next = hp[0]
|
||||
tail = tail.Next
|
||||
|
||||
hp[0] = hp[0].Next
|
||||
if hp[0] == nil {
|
||||
heap.Remove(&hp, 0)
|
||||
} else {
|
||||
heap.Fix(&hp, 0)
|
||||
}
|
||||
}
|
||||
|
||||
tail.Next = nil
|
||||
return head.Next
|
||||
}
|
||||
|
||||
var _ = mergeKLists
|
||||
Loading…
Add table
Add a link
Reference in a new issue