• 剑指offer 最小的K个数


    题目描述

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
     
     
     
    思路一:直接排序,时间复杂度O(nlogn)
    思路二:建立最大堆。
     1 class Solution {
     2 public:
     3     vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
     4         vector<int> res;
     5         int len = input.size();
     6         if (k <= 0 || k > len) //k不符合条件的话,均返回空
     7             return res;
     8         priority_queue<int,vector<int> > pq;
     9         for (int i = 0; i < len; i++) {
    10             if (pq.size() < k) {
    11                 pq.push(input[i]);
    12             } else {
    13                 int temp = pq.top();
    14                 if (input[i] < temp) {
    15                     pq.pop();
    16                     pq.push(input[i]);
    17                 }
    18             }
    19         }
    20         while (!pq.empty()) {
    21             int top = pq.top();
    22             pq.pop();
    23             res.push_back(top);
    24         }
    25         //sort(res.begin(), res.end());
    26         return res;
    27     }
    28 };
    思路三:快排思想
  • 相关阅读:
    FormData的使用
    数据绑定
    DOM的映射机制
    leetcode750
    leetcode135
    leetcode41
    leetcode269
    leetcode253
    leetcode42
    leetcode48
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11386609.html
Copyright © 2020-2023  润新知