题解 | #最小的K个数#

最小的K个数

http://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf

class Solution {
public:
    int partition(vector<int> &input,int l,int r){
        int pivot = input[l];
        int i = l;
        for(int j = i + 1;j <= r;++j)
            if(input[j] <= pivot)
                swap(input[++i],input[j]);
        swap(input[i],input[l]);
        return i;  //返回中界点
    }
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> ans;
        if(k == 0 || input.size() < k)
            return ans;
//         sort(input.begin(),input.end());
//         for(int i = 0;i < k;++i)
//             ans.push_back(input[i]);
//         return ans;
        int left = 0,right = input.size() - 1;
        while(1){
            int mid = partition(input,left,right);
            if(mid == k)
                return vector<int>({input.begin(),input.begin() + k });
            else if(mid > k)
                right = mid - 1;
            else
                left = mid + 1;
        }
        return ans;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务