题解 | #寻找第K大# go + 快排(倒序)

寻找第K大

http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf

go + 快排(数组倒序)

/**
 * 
 * @param a int整型一维数组 
 * @param n int整型 
 * @param K int整型 
 * @return int整型
*/
func findKth( a []int ,  n int ,  K int ) int {
    // write code here
    find := 0

    var sorts func(l, r int, K int)
//     对数组进行倒叙排序,这样的话,数组就是从大到小排列的
    sorts = func(l, r int, K int) {
        ll := l
        rr := r
        target := a[l]

//      倒序
        for l < r {
//          target >= a[r] 倒序
            for l < r && target >= a[r] {
                r--
            }
            a[l] = a[r]

//          target <= a[l]  倒序
            for l < r && target <= a[l] {
                l++
            }
            a[r] = a[l]
        }

        a[l] = target

//      当前位置等于k
        if l == K{
            find = target
            return
        }else if l > K {
//          当前位置大于k, 则说明 第k大 在左侧
            sorts(ll, l-1, K)
        }else if l < K {
//             当前位置小于k,说明第k大在 右侧
            sorts(l+1, rr, K)
        }
    }


// 由于数组下表是从0开始,所以 第K大 对应数组 第k-1个
// 对数组进行倒叙排序
    sorts(0, len(a)-1, K-1)

    return find
}
全部评论

相关推荐

12-24 20:52
武汉大学 Java
点赞 评论 收藏
分享
烤点老白薯:他第二句话的潜台词是想让你帮他点个瑞幸或者喜茶啥的
mt对你说过最有启发的一...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务