美文网首页
【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