给定一个数组,返回前K个最小的数。
方法一 大根堆 时间复杂度(nlogK)
因为只要求出前K个最小的数,于是我们可以先建一个大小为K的大根堆,然后遍历数组内余下的元素,如果当前元素A[i] 比堆顶元素小,则将堆顶元素换为A[i] 向下调整堆,否则继续遍历。
void adjustDown(vector<int> &A,int k, int len) {
int root = A[k];
for (int i = 2*k+1; i < len; i = i*2 + 1) {
if( i < len && A[i] < A[i+1]) ++