題目描述
輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。
思路
快速排序取前K個數
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k)
{
if(input.size()==0 || k>input.size()) return{};
vector<int> res;
quick_greater(0, input.size()-1, input);
for(int i = 0;i<k;i++)
{
res.push_back(input[i]);
}
return res;
}
private:
//快速排序
void quick_greater(int left,int right,vector<int>& arr)
{
if(left >= right) return;
int i,j,base,temp;
i = left,j = right;//左右哨兵
base = arr[left];//取最左面的數爲基準
while(i<j)
{
while(arr[j] >= base && i<j)//從右向左找比基準小的值
{
j--;
}
while(arr[i] <= base && i<j)
{
i++;
}
if(i<j)//交換一次比基準大的和比基準小的值
{
temp = arr[i];
arr[i] = arr[j];
arr[j] =temp;
}
}
//交換基準值和i == j時的值
arr[left] = arr[i];
arr[i] = base;
quick_greater(left,i-1,arr);//遞歸左邊
quick_greater(i+1,right,arr);//遞歸右邊
}
};