题解 | #最小的K个数#

最小的K个数

http://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf

package main


//修改快排,平均nlogn,最坏On^2 ; 空间平均logn,最坏On
func GetLeastNumbers_Solution(input []int, k int) []int {
    if k == 0 {
        return []int{}
    }
    quickSort(input, 0 , len(input) - 1)
    return input[:k]
}

func quickSort(nums []int, left, right int) {
    if left > right {
        return
    }

    i, j, base := left, right, nums[left]               //优化点,随机选基准

    for i < j {
        for nums[j] >= base && i < j {
            j--
        }
        for nums[i] <= base && i < j {
            i++
        }
        nums[i], nums[j] = nums[j], nums[i]
    }
    nums[i], nums[left] = nums[left], nums[i]

    quickSort(nums, left, i - 1)
    quickSort(nums, i + 1, right)
}













全部评论

相关推荐

offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
昨天 11:21
门头沟学院 Java
总包48.5w,意想不到的价格
无情咸鱼王的秋招日记之薛定谔的Offer:R
点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务