题解 | 最小的K个数

最小的K个数

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

class Solution {
public:

    /**
        partition function in quick sort, range [lh, rh)
        returns pivot index after partition
    */
    int Partition(vector<int> &input, int lh, int rh) {
        int pivot = lh;
        int index = pivot + 1;
        auto swap = [](vector<int> &input, int i1, int i2) -> void {
            int tmp = input[i1];
            input[i1] = input[i2];
            input[i2] = tmp;
        };

        for(int i = index; i < rh; ++i) {
            if(input[i] < input[pivot]) {
                swap(input, i, index++);
            }
        }
        swap(input, index - 1, pivot);
        return index - 1;
    }
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param input int整型vector 
     * @param k int整型 
     * @return int整型vector
     */
    vector<int> GetLeastNumbers_Solution(vector<int>& input, int k) {
        if(k == 0) {
            return {};
        }
        int lh = 0, rh = input.size(), p;
        while(lh < rh) {
            p = Partition(input, lh, rh);
            if(p + 1 == k) {
                return vector<int>(input.begin(), input.begin() + k);
            } else if(p < k) {
                lh = p + 1;
            } else {
                rh = p;
            }
        }
        // NEVER REACHED HERE
        return {-1};
    }
};

全部评论

相关推荐

今天 15:47
已编辑
陕西理工大学 财务
认真搞学习:这个真喷不了,你是我见过最美的牛客女孩
点赞 评论 收藏
分享
高斯林的信徒:问你有没有保底,好人啊,就差把这是kpi面告诉你了
点赞 评论 收藏
分享
05-16 09:20
已编辑
中国民航大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务