给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
// 方法1:快排func findKthLargest(nums []int, k int) int {quickSort(nums,0,len(nums)-1)return nums[len(nums)-k]}func quickSort(nums []int,left,right int){if left > right {return}l,r,privot := left,right,nums[left]for l < r {for l < r && nums[r] > privot{r--}for l < r && nums[l] <= privot {l++}nums[l],nums[r] = nums[r],nums[l]}nums[left],nums[l] = nums[l],nums[left]quickSort(nums,left,l-1)quickSort(nums,l+1,right)}// 方法2:快排的优化func findKthLargest(nums []int, k int) int {TopKSplit(nums, len(nums)-k, 0, len(nums)-1)return nums[len(nums)-k]}func Parition(nums []int, start, stop int)int{if start >= stop{return -1}pivot := nums[start]l, r := start, stopfor l < r{for l < r && nums[r] >= pivot{r--}nums[l] = nums[r]for l < r && nums[l] < pivot{l++}nums[r] = nums[l]}// 循环结束,l与r相等// 确定基准元素pivot在数组中的位置nums[l] = pivotreturn l}func TopKSplit(nums []int, k, start, stop int){if start < stop{index := Parition(nums, start, stop)if index == k{return}else if index < k{TopKSplit(nums, k, index+1, stop)}else{TopKSplit(nums, k, start, index-1)}}}作者:ybzdqhl链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/solution/topklei-wen-ti-xiang-jie-by-ybzdqhl-w7lo/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
