class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int > res; vector<int> heap = make_heap(input); while(k--){ res.push_back(heap[0]); swap(heap[0], heap[heap.size()-1]); heap.pop_back(); down(heap); } return res; } vector<int> make_heap(vector<int> input){ vector<int > heap; for(int i = 0; i < input.size(); i++) { heap.push_back(input[i]); up(heap); } return heap; } void up(vector<int>& heap){ int length = heap.size(); int i = length - 1; while(i){ int prei = i; if(i % 2 == 0){ if(heap[i] < heap[i/2 - 1]){ swap(heap[i], heap[i/2-1]); i = i / 2 - 1; } }else{ if(heap[i] < heap[(i-1)/2]){ swap(heap[i], heap[(i-1)/2]); i = (i-1) / 2; } } if(prei == i) break; } } void down(vector<int>& heap){ int length = heap.size(); int i = 0; while(i < length / 2){ int prei = i; int j = 2 * i + 1; int k = 2 * (i + 1); if(k < length){ if(heap[j] > heap[k]){ j = k; // 保证j最小 } } if(heap[i] > heap[j]){ swap(heap[i], heap[j]); i = j; } if(prei == i) break; } } };