题目
题目来源:力扣(LeetCode)

思路分析
每次选择剩余木棒中费用最少的两根进行连接,其实就是哈弗曼树权值求和的问题。求哈夫曼权值和,我们可以借助数组来做,不过最方便的还是借助优先队列。
- 首先将所有权值push进优先队列
- 循环遍历队列,每次取出队列两个最小值求和,同时将两个值的和push进队列,直到队列为空
- 结束循环,返回结果最小花费
/*** @param {number[]} sticks* @return {number}*/// dequeue是按照进⼊队列的先后顺序来取出元素。// 在堆中,我们不是按照元素进⼊队列的先后顺序取出元素的,⽽是按照元素的优先级取出元素var connectSticks = function (sticks) {let ans = 0;let p = new MinPriorityQueue();for (const x of sticks) {p.enqueue(x, x);}while (p.size() > 1) {let a = p.dequeue().element;a += p.dequeue().element;ans += a;p.enqueue(a, a);}return ans;};
