zoukankan      html  css  js  c++  java
  • 剑指offer-面试题40-最小的k个数-最大堆

    /*
    题目:
    	输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
    */
    /*
    思路:
    	利用最大堆,C++中使用multiset<int,greater<int>>。
    	当multiset中的值的个数小于K,则insert。
    	当大于等于k时,判断multiset的最大值是否大于当前遍历值,若大于则覆盖。
    */
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<set>
    #include<vector>
    
    using namespace std;
    
    
    
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        multiset<int,greater<int>> outSet;
        multiset<int,greater<int>>::iterator iter;
        vector<int> out;
        int len = input.size();
        if(k > len || k <= 0) return out;
    
        for(int i = 0; i < len; i++){
            if(outSet.size() < k){
                outSet.insert(input[i]);
            }else{
                iter = outSet.begin();
                if(*iter > input[i]){
                    outSet.erase(iter);
                    outSet.insert(input[i]);
                }
            }
        }
        for(iter = outSet.begin(); iter != outSet.end(); iter++){
            out.push_back(*iter);
        }
        return out;
    
    
    }
    
    int main(){
        vector<int> in = {};
        vector<int> out = GetLeastNumbers_Solution(in,10);
        for(int i = 0; i < out.size(); i++){
            cout<<out[i]<<" ";
        }
    
    }
    

       

  • 相关阅读:
    待重写
    待重写
    待重写
    ReflectionUtils使用
    kafka消费组、消费者
    待重写
    Map接口常用实现类学习
    利用httpClient发起https请求
    sql常用格式化函数及字符串函数
    method reference
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/11979756.html
Copyright © 2011-2022 走看看