题解 | #最小的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哈:Radis写错了兄弟
点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务