原題鏈接在這里:https://leetcode.com/problems/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
Constraints:
1 <= sticks.length <= 10^4
1 <= sticks[i] <= 10^4
題解:
Find the routine that add the two smallest first, then largest repeated the least times.
Use min heap to get two 2 smallest values, merge them and add merged back to min heap unitl there is only one stick in min heap.
Time Complexity: O(nlogn). n = sticks.length.
Space: O(n).
AC Java:
1 class Solution { 2 public int connectSticks(int[] sticks) { 3 if(sticks == null || sticks.length < 2){ 4 return 0; 5 } 6 7 PriorityQueue<Integer> minHeap = new PriorityQueue<>(); 8 for(int num : sticks){ 9 minHeap.add(num); 10 } 11 12 int res = 0; 13 while(minHeap.size() > 1){ 14 int merge = minHeap.poll() + minHeap.poll(); 15 res += merge; 16 minHeap.add(merge); 17 } 18 19 return res; 20 } 21 }