题解 | #最小的K个数#

最小的K个数

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

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param input int整型vector 
     * @param k int整型 
     * @return int整型vector
     */
    //完整快排思想
    int part(vector<int> &input,int low,int high){
        int pivot=input[low];//以最左侧的值作为基准
        int i=low;
        int j=high;
        while(i<j){
            //从右到左,找小的。找到了就交换位置
            while(i<j && input[j]>pivot){
                j--;
            }
            //交换位置后,比基准小的值在数组i左侧
            if(i<j)
                swap(input[i++],input[j]);
            //从左往右,找大的,找到了就交换位置
            while(i<j && input[i]<=pivot){
                i++;
            }
            //交换位置后,比基准大的值在数组i右侧
            if(i<j)
                swap(input[i],input[j--]);
        }
        //i两侧存在大小关系(左大右小)的位置作为下一次划分的依据
        return i;
    }

    void quickSort(vector<int> &input,int low,int high){
        int mid=0;
        if (low<high){
            mid=part(input,low,high);
            quickSort(input, low, mid-1); //每一次递归,排序区间缩小一半
            quickSort(input, mid+1, high);
        }
    }

    vector<int> GetLeastNumbers_Solution(vector<int>& input, int k) {
        int low=0;
        int high=input.size()-1;
        quickSort(input, low, high);
        vector<int> rel(input.begin(),input.begin()+k);
        return rel;

        // write code here
    }
};

全部评论

相关推荐

06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务