美文网首页
【LintCode 题解】791. Merge Number

【LintCode 题解】791. Merge Number

作者: Downstream | 来源:发表于2018-02-21 12:15 被阅读0次
    • 难度:中等
    • 标签:贪心、优先队列

    题目

    给出 n 个数,现在要将这 n 个数合并成一个数,每次只能选择两个数 a, b 合并,每次合并需要消耗 a+b 的能量,输出将这 n 个数合并成一个数后消耗的最小能量。

    注意事项

    2 ≤ n ≤ 50000,合并后的数字不会超过 int 范围

    样例

    Sample Input:
    [1, 2, 3, 4]
    
    Sample Output:
    19
    
    Sample Input:
    [2, 8, 4, 1]
    
    Sample Output:
    25
    

    解答

    本题为优先队列的简单应用,代码如下:

    class Solution {
    public:
        /**
         * @param numbers: the numbers
         * @return : the minimum cost
         */
        int mergeNumber(vector<int> &numbers) 
        {
            // 创建一个小顶堆 heap
            priority_queue<int, vector<int>, greater<int>> heap;
            int a, b, val, sum = 0;
            for(auto x : numbers)
                heap.push(x);
            while(heap.size() != 1) 
            {
                a = heap.top();
                heap.pop();
                b = heap.top();
                heap.pop();
                val = a + b;
                heap.push(val);
                sum += val;
            }
            return sum;
        }
    };
    

    相关文章

      网友评论

          本文标题:【LintCode 题解】791. Merge Number

          本文链接:https://www.haomeiwen.com/subject/gmontftx.html