zoukankan      html  css  js  c++  java
  • 29、剑指offer--最小的K个数

    题目描述
    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
     
    解题思路:使用multiset存储k个最小值
    1)先存入k个值
    2)用multiset中的最大值和当前访问数组元素比较,若小于则把该值从multiset中移除,数组元素插入
    3)遍历multiset将k个值存入vector中
    注意事项:边界条件的判断,数组为空,k小于1,以及k大于数组元素数目
     1 class Solution {
     2 public:
     3     vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
     4         vector<int> result;
     5         if(input.empty() || k<1 || input.size()<k)
     6             return result;
     7         multiset<int> insert_set;
     8  
     9         set<int>::iterator it; //定义前向迭代器
    10         multiset<int>::reverse_iterator rit; //定义反向迭代器
    11         for(int i=0;i<input.size();i++)
    12         {
    13  
    14             if(i<k)
    15             {
    16                 insert_set.insert(input[i]);
    17             }
    18  
    19             else
    20             {
    21                 rit = insert_set.rbegin();
    22                 if(input[i] < *rit)
    23                 {
    24  
    25                     insert_set.erase(*rit);
    26                     insert_set.insert(input[i]);
    27                 }
    28             }
    29         }
    30  
    31  
    32         for(it = insert_set.begin(); it != insert_set.end(); it++)
    33         {
    34             result.push_back(*it);
    35         }
    36         return result;
    37     }
    38 };
  • 相关阅读:
    SignalR2结合ujtopo实现拓扑图动态变化
    SignalR2简易数据看板演示
    使用SignalR 2进行服务器广播
    使用SignalR实时Web应用程序
    ZooKeeper安装
    MongoDB安装
    线程安全与非线程安全
    监听器,事件对象,事件源
    Graphics与Canvas
    JDialog
  • 原文地址:https://www.cnblogs.com/qqky/p/6929074.html
Copyright © 2011-2022 走看看