天天看點

lintcode 1872 · Minimum Cost to Connect Sticks

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;
    }
}
           

繼續閱讀