go解题答案
- 时间复杂度O(n)
- 思路概括:倒序快排
- 思路核心:
1、因为是第K大,所以倒序快排,
2、和中间点比较,可以每次只需处理一半的数据
func findKth( a []int , n int , K int ) int {
res:=quickSort(a,0,n-1,K)
return res
}
func quickSort(arr []int,left int,right int,K int)int{
if left<=right{ // 因为会有重复值,所以要等于
p:=partition(arr,left,right)
if p==K-1{
return arr[p] //等于直接输出
}else if p<K-1{
return quickSort(arr,p+1,right,K) // 排一半
}else{
return quickSort(arr,left,p-1,K)
}
}
return -1
}
func partition(arr []int,left int,right int)int{
p:=arr[left]
for left < right{
for left < right && arr[right] < p{
right--
}
if left < right {
arr[left]= arr[right]
left++
}
for left < right && arr[left] > p{
left++
}
if left < right {
arr[right]= arr[left]
right--
}
}
arr[left]=p
return left
}
如果有帮助请点个赞哦, 更多文章请看我的博客
题主背景
- 从业8年——超级内卷500Q技术经理——目前专注go和微服务架构