Minimum Cost to Connect Sticks

You have some sticks with positive integer lengths.

You can connect any two sticks of lengths X and Y into one stick by paying a cost of X + Y.  You perform this action until there is one stick remaining.

Return the minimum cost of connecting all the given sticks into one stick in this way.

Example 1:

Input: sticks = [2,4,3]
Output: 14

Example 2:

Input: sticks = [1,8,3,5]
Output: 30

思路:用pq,每次poll出来最小的两个,进行相加; Time: O(nlogn) Space: O(n)

class Solution {
    public int connectSticks(int[] sticks) {
        if(sticks == null || sticks.length == 0) {
            return 0;
        }
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
        for(int i = 0; i < sticks.length; i++) {
            pq.offer(sticks[i]);
        }
        int cost = 0;
        while(pq.size() >= 2) {
            int a = pq.poll();
            int b = pq.poll();
            pq.add(a + b);
            cost += (a + b);
        }
        return cost;
    }
}
发布了673 篇原创文章 · 获赞 13 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/u013325815/article/details/105176280