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) 编辑 收藏 举报