https://www.lintcode.com/problem/1872/description
[brainstorm]
1 go through two given cases
2 see pattern
sum up smallest and second smallest,
repeat the same calculation.
3 use list
insert sum into list cost O(n)
say n number, then O(n^2), not good.
say use two list, the same thing.
4 consider smallest and second smallest for a few seconds.
heap is good structure for this.
public class Solution {
/**
* @param sticks: the length of sticks
* @return: Minimum Cost to Connect Sticks
*/
public int MinimumCost(List<Integer> sticks) {
// write your code here
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
for(int stick: sticks){
pq.add(stick);
}
int ret = 0;
while(pq.size() >= 2){
int num1 = pq.poll();
int num2 = pq.poll();
int sum = num1 + num2;
pq.add(sum);
ret += sum;
}
return ret;
}
}