题解 | #寻找第K大#

寻找第K大

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

基于快排思想选择分割点,在选择递归区间时可以分治讨论,不需要做全局快排。 注意朴素选择left作为哨兵是过不了长用例的,需要使用随机数选择进行优化。

import "math/rand"
import "time"
func findKth( a []int ,  n int ,  K int ) (res int) {
    // write code here
    var quickFind func(left int,right int)
    quickFind = func(left int,right int) {
        //i := rand.Int() % (r - l + 1) + l
        recordP := rand.Int() % (right - left + 1) + left
        a[recordP],a[left] = a[left],a[recordP]
        explodeIndex := left
        for i := left + 1;i <= right;i++ {
            if a[i] >= a[left] {
                explodeIndex++
                a[i],a[explodeIndex] = a[explodeIndex],a[i]
            }
        }
        a[left],a[explodeIndex] = a[explodeIndex],a[left]
        if explodeIndex == (K - 1) {
            res = a[explodeIndex]
            return
        }else if(explodeIndex > (K - 1)) {
            quickFind(left,explodeIndex - 1)
        }else if(explodeIndex < (K - 1)) {
            quickFind(explodeIndex + 1,right)
        }
    }
    rand.Seed(time.Now().UnixNano())
    quickFind(0,n - 1)
    return
}
全部评论

相关推荐

04-21 13:50
已编辑
北京理工大学 硬件测试
我们学校连夜发了声明,绝了绝了!看完了全部ppt,震碎三观。一般情况下我是站学生的,但这不是一般情况。这男的不能被取消学位吗?自己吃到了红利,靠着面试泄题得到的保研,又反手举报导师。这导师是《被举报系列》里最惨最恋爱脑的了,当然最可怜的是他的同妻……
牛客小黄鱼:看了ppt的聊天记录,真不知道谁才是受害者!有人为你剥过柚子吗?有人为你雪地里等你吗?有人为你写过情书吗?有人为你规划未来吗?有人为你小心翼翼吗?有人为你整页失眠失眠吗? 有人为你送上自己的科研成果吗?有人为你安排出国留学吗?有人愿意给你一个月2万吗?
点赞 评论 收藏
分享
你包有offer的:我面了10面才进去
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务