Sword 40

https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/

应用快排中的 partition 函数,

如果返回值比 K 大就在前半段寻找第 K 大的值,

如果返回值比 K 小就在后半段寻找第 K-num 大的值(num 是pos 的相对位置),

若等于 K,结果就是 arr 中的前 K 个元素。

再说 partition 函数

以arr[left]的值来分割 arr, 先将 a[left]存在 pivot 中,创建两个指针 low, high分别指向头尾

先找到第一个小于pivot 的 arr[high], 覆盖 arr[low],

再找到第一个大于 pivot 的 arr[low], 覆盖 arr[high],

这样数组两端就有符合题意了,中间化成了一个规模更小的,和原问题同性质的数组,

一直迭代到 i >= j即可.

本题是qsort 的困难版,因为要考虑第 K 个排名。

 

posted on 2021-03-01 15:36  FriskyPuppy  阅读(23)  评论(0编辑  收藏  举报

导航