寻找数组中第K大的数(Go语言版)

题目:

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。

给定一个整数数

输入

[1,3,5,2,2],5,3

返回值

给定数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

解法1:快排

func findKth( a []int ,  n int ,  K int ) int {
    // write code here
    mid ,i := a[0],1
    first,tail := 0,n-1
    for first < tail{
        if a[i] < mid {
            a[i],a[tail] = a[tail],a[i]
            tail--
        }else{
            a[i],a[first] = a[first],a[i]
            first++
            i++
        }
    }
    a[first] = mid
 
 
    if K-1 == first {
        return mid
    }
    if K -1 < first {
        return findKth(a[:first],first,K)
    }
    return findKth(a[first+1:],n-first-1 ,K-first-1)
}

  

原文地址:https://www.cnblogs.com/lvpengbo/p/14452020.html