class Solution {
public:

    void heap_min(vector<int>& tree, int i){
        if (tree.size() <= 1) {
            return;
        }

        int left = 2 * i + 1;
        int right = 2 * i + 2;

        if (tree[left] < tree[i]) {
            std::swap(tree[left], tree[i]);
        }

        if (right > tree.size() - 1)
            return;

        if (tree[right] < tree[i]) {
            std::swap(tree[right], tree[i]);
        }
    }


    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> result;

        if(k > input.size()) 
            return result;

        for (int number = 0; number < k; number++) {
            int length = input.size();
            // 进行一次堆化,使第一个元素最小
            for (int i = (length - 2) / 2; i >= 0; i--){
                heap_min(input, i);
            }
            // 交换第一个和最后一个
            std::swap(input[0], input[length - 1]);
            // 添加到结果
            result.push_back(input.back());
            // 删除最后一个元素
            input.pop_back();
        }

        return result;
    }
};