1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| func findKthLargest(nums []int, k int) int { QuickChoose(&nums, 0, len(nums) - 1, k - 1) return nums[k - 1] }
func QuickChoose(nums *[]int, start, end, k int) { if start < end { i, j := start, end mid := (*nums)[(i + j) / 2] for i <= j { for (*nums)[i] > mid { i ++ } for (*nums)[j] < mid { j -- } if i <= j { (*nums)[i], (*nums)[j] = (*nums)[j], (*nums)[i] i++ j-- } } if k <= j { QuickChoose(nums, start, j, k) } else if k >= i { QuickChoose(nums, i, end, k) } } }
|