zoukankan      html  css  js  c++  java
  • 最小的K个数

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

    这道题可以用大根堆来做,大根堆的top元素是整个堆里面最大的元素。我们往大根堆里面加元素,如果堆里面的个数大于K了,就把堆顶元素弹出来,所以弹出来的是堆中的最大元素。由于每一次弹出的都是最大元素,所以最后剩下的K个数一定是最小的K个。

    c++代码如下:

     1 class Solution {
     2 public:
     3     vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
     4         if(k > input.size()) return vector<int>({});
     5         priority_queue<int> q;
     6         vector<int> res;
     7         for(auto x : input){
     8             q.push(x);
     9             if(q.size() > k) q.pop();
    10         }
    11         while(q.size()){
    12             res.push_back(q.top());
    13             q.pop();
    14         }
    15         reverse(res.begin(), res.end());
    16         return res;
    17     }
    18 };
  • 相关阅读:
    前端资源网址
    IDEA激活工具
    新建jsp项目
    jsp笔记
    iOS的SVN
    iOS学习网站
    测试接口工具
    MVP模式
    关于RxJava防抖操作(转)
    注释模板
  • 原文地址:https://www.cnblogs.com/hellosnow/p/11720862.html
Copyright © 2011-2022 走看看