Leetcode1167 Minimum Cost to Connect Sticks
领扣地址 本题在Leetcode上是会员题,对应Lintcode-1872
有若干长度为正整数的棍子,每连接两个棍子X和Y需要X+Y的代价,求问将所有棍子连接成一个的最小代价
因为连接两个棍子需要的代价是他们的长度和,合为一个之后又会再与其他棍子连接,相当于他们被重复计算了多次,为了减少代价,重复的长度必须要尽量小,所以很明显,每次取最小的两个棍子。
使用优先队列就迎刃而解了。
本题代码
1 | public int MinimumCost(List<Integer> sticks) { |
注意点
C++中STL优先队列默认是大顶堆,队首是最大值
C++
1 | // 小顶堆 |
Java中的优先队列默认是小顶堆,队首是最小值
Java若要实现大顶堆,重写Comparator函数
1 | private static final int DEFAULT_INITIAL_CAPACITY = 11; |
最后更新: 2020年06月10日 21:40
原始链接: http://roooooobin.github.io/2020/06/10/Minimum-Cost-to-Connect-Sticks-Solution/