• 剑指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]<<" ";
        }
    
    }
    

       

  • 相关阅读:
    软件开发规范
    Fail2ban + firewalld 防护doss攻击
    SourceTree&Git部分名词解释
    训子
    一个网络下,手机如何访问本地网址
    tempalte.js的一般用法
    template.js的介绍
    获取URL中的参数
    js判断苹果和安卓端或者wp端
    HTML5与WebGL编程
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/11979756.html
Copyright © 2020-2023  润新知