描述
有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数。
给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在。
要求:时间复杂度 O(nlogn),空间复杂度 O(1)
数据范围:0\le n \le 10000≤n≤1000, 1 \le K \le n1≤K≤n,数组中每个元素满足 0 \le val \le 100000000≤val≤10000000
输入:
[1,3,5,2,2],5,3
返回值:
2
package main
func find(a[]int, l,r int) {
if l>r {
return
}
var x = a[(l+r)/2]
var i,j = l,r
for i<=j {
for a[i] > x {
i++
}
for a[j] <x {
j--
}
if i<=j {
a[i] ,a[j] = a[j],a[i]
i++
j--
}
}
find(a,l,j)
find(a,i,r)
}
/**
*
* @param a int整型一维数组
* @param n int整型
* @param K int整型
* @return int整型
*/
func findKth( a []int , n int , K int ) int {
// write code here
find(a,0,n-1)
return a[K-1]
}