本文共 1033 字,大约阅读时间需要 3 分钟。
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。示例1输入[4,5,1,6,2,7,3,8],4返回值[1,2,3,4]
需要考虑边界问题:n小于k!
class Solution { public: vector GetLeastNumbers_Solution(vector input, int k) { int len=input.size(); if(len
class Solution { public: vector getLeastNumbers(vector & arr, int k) { vector vec(k, 0); if (k == 0) { // 排除 0 的情况 return vec; } priority_queue Q; //前k个数入堆 for (int i = 0; i < k; ++i) { Q.push(arr[i]); } //把剩余的数入堆,保证堆里只有k个数 for (int i = k; i < (int)arr.size(); ++i) { if (Q.top() > arr[i]) { Q.pop(); Q.push(arr[i]); } } //将结果保存在vec中 for (int i = 0; i < k; ++i) { vec[i] = Q.top(); Q.pop(); } return vec; }};
转载地址:http://ezevi.baihongyu.com/