牛客网[最小的k个数]

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,

解法1;利用最大堆,O(nlogk)

vector GetLeastNumbers_Solution(vector input, int k) {
        if(input.empty()||k>input.size()||k<=0)
            return {};
        vectorheap_input(input.begin(),input.begin()+k);
        make_heap(heap_input.begin(),heap_input.end());
        for(int i=k;i

注意题目条件要考虑周期,对于k<=0这种情况开始没有考虑,导致在牛客网上编译通不过。

解法2:利用全排序  时间复杂度O(nlogn)

 vector GetLeastNumbers_Solution(vector input, int k) {
        if(input.empty()||k>input.size())
            return {};
        vectorres;
        sort(input.begin(),input.end());
        for(int i=0;i

 

你可能感兴趣的:(最小k个数,C++)