最小的K个数

2020-07-28  本文已影响0人  Crazy_Bear
class Solution {
public:
    void adjust(vector<int> &input, int index,int k){
        int key = input[index];
        int i = 0;
        for(i = (index+1)*2-1;i<=k;i=(i+1)*2-1)
        {
            if(i < k&& input[i+1]>input[i])
                i++;
            if(input[i]<key)
                break;
            input[index] = input[i];
            index = i;
        }
        input[index] = key;
    }
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        
     /*   if(input.empty()||k==0||k>input.size()) return {};
       vector<int> p;
        priority_queue<int,vector<int>,greater<int>> q;
        vector<int>::iterator it;
        for(it=input.begin();it!=input.end();it++)
            q.push(*it);
        for(int i=0;i<k;i++){
            p.push_back(q.top());
            q.pop();
        }
           return p; */
        if(input.empty()||k==0||k>input.size()) return {};
        for(int i = (k/2-1); i>=0;i--){
            adjust(input,i,k-1);
        }
        for(int i = k;i <input.size();i++)
            if(input[i]<input[0]) {
                input[0]=input[i];
                adjust(input,0,k-1);
            }
        return vector<int> (input.begin(),input.begin()+k);
    }
      
};
上一篇 下一篇

猜你喜欢

热点阅读