Leetcode sort minimum number of K

THE

problem

solution

Code


/*
思路: 这是一道排序的应用。 有很多算法, 这里选择使用堆来实现, 堆其实是用数组维护的二叉树。 

我们使用stl中的multiset , 里面只保留k个数。如果使用快排的话就是先排序, 然后遍历存储到一个新的vector.
这样确实比较麻烦。heap 是直接通过比较第k个最小值,不断insert进去新的树, 这种时间复杂度也为nlogn. 

- 
- 
- - 
- - 
- 
*/


class Solution {
    
    
public:
   vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
    
    
       int len = input.size();
       if(len<=0||k>len) return vector<int>();
       
       multiset<int, greater<int> > leastNums;
       vector<int>::iterator it  = input.begin();
       for(; it!= input.end(); it++){
    
    
           if(leastNums.size()<k){
    
    
               leastNums.insert(*it);
           }
           else{
    
    
           multiset<int, greater<int>>::iterator heapIt = leastNums.begin();
           if(*it < *leastNums.begin()){
    
    
               leastNums.erase(*heapIt);
               leastNums.insert(*it);
           }
           }    
       }
       vector<int> myvector(leastNums.begin(), leastNums.end());
       std::reverse(myvector.begin(),myvector.end());
       return myvector; 
       
   }
};


Summary and reflection

  1. Examined the usage of some heap advanced data structures.

Guess you like

Origin blog.csdn.net/liupeng19970119/article/details/114216200
Recommended