[剑指Offer]最小的K个数

/*
思路:o(n)的算法,只有当可以更改输入的数组时候才可用
从数组中次数超过一半的数字得到启发。
就是用快速排序的思想,找到第K大的数,那么左边都是比它小的数了
*/
class Solution {
public:
    vector GetLeastNumbers_Solution(vector input, int k) {
		int start=0, end=input.size()-1;
		int index=Partition(input, start, end);
		while(index!=k-1)
		{
			if(index>k-1)//轴大于k
			{
				end=index-1;
				index=Partition(input, start, end);
			}
			else//轴小于k
			{
				start=index+1;
				index=Partition(input, start, end);
			}
		}
		vector ans;
		for(int i=0; i& input, int start, int end)//快速排序中对一段数按轴进行处理
	{
		int index=start;//或者int index=RandomInRange(start, end);就是找到轴
		swap(input[index], input[end]);
		int small=start-1;
		for(index=start; index

你可能感兴趣的:(LeetCode)