class Solution { public: vector<int> h; int idx; void down(int u) { int t = u; if (u * 2 <= idx && h[u * 2] > h[t]) t = u * 2; if (u * 2 + 1 <= idx && h[u * 2 + 1] > h[t]) t = u * 2 + 1; if (t != u) { swap(h[t], h[u]); down(t); } } vector<int> GetLeastNumbers_Solution(vector<int> v, int k) { if (k > v.size()) return {}; h = vector<int>(k + 1); for (int i = 0; i < k; i ++ ) h[i + 1] = v[i]; idx = k; for (int i = k / 2; i > 0; i -- ) down(i); for (int i = k; i < v.size(); i ++ ) { if (v[i] < h[1]) { h[1] = v[i]; down(1); } } vector<int> ans(k); for (int i = 0; i < k; i ++ ) ans[i] = h[i + 1]; return ans; } };