面试题 17.14. 最小K个数分治法
Posted 这是一个很随便的名字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 17.14. 最小K个数分治法相关的知识,希望对你有一定的参考价值。
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
提示:
0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))
class Solution {
public:
void quick_find(vector<int>& arr,int l,int r, int k)
{
if(l>=r) return;
int ll = l, rr = r, t = arr[l];
while(ll<rr)
{
while(ll<rr&&arr[rr]>=t) rr--;
swap(arr[ll],arr[rr]);
while(ll<rr&&arr[ll]<=t) ll++;
swap(arr[ll],arr[rr]);
}
if(ll>=k){
quick_find(arr, l, ll, k);
}
else{
quick_find(arr, ll+1, r, k);
}
}
vector<int> smallestK(vector<int>& arr, int k) {
//分治法,类似快排的思想
quick_find(arr,0,arr.size()-1,k);
vector<int> ret;
ret.assign(arr.begin(),arr.begin()+k);
return ret;
}
};
以上是关于面试题 17.14. 最小K个数分治法的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—面试题 17.14. 最小K个数(优先队列)—day27
Leetcode刷题100天—面试题 17.14. 最小K个数(优先队列)—day27
C++&Python描述 LeetCode 面试题 17.14. 最小K个数
LeetCode 面试题 17.14. 最小K个数(堆排,快排)/剑指 Offer 10- I. 斐波那契数列 /470. 用 Rand7() 实现 Rand10()(拒绝采样,学!!!)