37 lines
651 B
Go
37 lines
651 B
Go
package q215
|
|
|
|
func findKthLargest(nums []int, k int) int {
|
|
// build max-heap
|
|
for i := 1; i < len(nums); i++ {
|
|
for j := i; j > 0; j = (j - 1) / 2 {
|
|
parent := (j - 1) / 2
|
|
if nums[j] > nums[parent] {
|
|
nums[j], nums[parent] = nums[parent], nums[j]
|
|
}
|
|
}
|
|
}
|
|
|
|
for range k - 1 {
|
|
// pop the heap
|
|
nums[0] = nums[len(nums)-1]
|
|
nums = nums[:len(nums)-1]
|
|
|
|
i := 0
|
|
for i*2+1 < len(nums) {
|
|
l, r := i*2+1, i*2+2
|
|
next := l
|
|
if r < len(nums) && nums[r] > nums[l] {
|
|
next = r
|
|
}
|
|
if nums[i] >= nums[next] {
|
|
break
|
|
}
|
|
nums[i], nums[next] = nums[next], nums[i]
|
|
i = next
|
|
}
|
|
}
|
|
|
|
return nums[0]
|
|
}
|
|
|
|
var _ = findKthLargest
|