lc-go/solutions/2/q215/solution.go
2025-12-28 12:54:21 +09:00

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