| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | func findKthLargest(nums []int, k int) int {	pq := NewFixedPQ(k)	for i := range nums {		pq.Enqueue(nums[i])	}	return pq.Peek()}type FixedPQ struct { // Small root heap XD	Size int	PQ   []int}func NewFixedPQ(size int) FixedPQ {	return FixedPQ{size, make([]int, 1)}}func (pq *FixedPQ) Enqueue(x int) {	if pq.Len() < pq.Size {		pq.PQ = append(pq.PQ, x)		pq.swim(pq.Len())	} else if pq.Peek() < x {		pq.PQ[1] = x		pq.sink(1)	}}func (pq *FixedPQ) Dequeue() int {	peek := pq.PQ[1]	pq.Swap(1, pq.Len())	pq.PQ = pq.PQ[:pq.Len()]	pq.sink(1)	return peek}func (pq FixedPQ) Len() int           { return len(pq.PQ) - 1 }func (pq FixedPQ) Less(i, j int) bool { return pq.PQ[i] < pq.PQ[j] }func (pq FixedPQ) Swap(i, j int)      { pq.PQ[i], pq.PQ[j] = pq.PQ[j], pq.PQ[i] }func (pq FixedPQ) Peek() int {	return pq.PQ[1]}func (pq FixedPQ) swim(i int) {	for 1 < i && pq.Less(i, i/2) {		pq.Swap(i, i/2)		i /= 2	}}func (pq FixedPQ) sink(i int) {	for 2*i <= pq.Size {		j := 2*i		if (j < pq.Size && pq.Less(j+1, j)) {			j++ // Compare with the smaller child		}		if !pq.Less(j, i) {			break // If ith <= jth, stop sinking		}		pq.Swap(i, j)		i = j	}}
 |